Błędy czyli moje pierwsze zderzenie z klasami

Błędy czyli moje pierwsze zderzenie z klasami

Wątek przeniesiony 2014-12-14 18:38 z Java przez bogdans.

  • Rejestracja: dni
  • Ostatnio: dni
0

Witam

Juz prawie ogarniam klasy a moze mi sie tylko wydaje ze je ogarniam bo mojego rozumowania klas jeszcze nikt nie sprawdzil wiec napotkałem taki mały problem z klasami a jednak nie ogarnąłem tego w całosci ale wciaz sie pocieszam zeby to zrozumiec potrzeba czasu i treningu. Pocwiczymy zobaczym dzis pierwszy dzien tego mojego rozumowania, wiec chyba i tak nie jest najgorzej bo cos juz ogarnąłem nie wiem po co to pisze dobra wiec pokaze wam moj kod. Jesli to jest zle to nie smiejcie sie z tego :)

kod z klasa1

Kopiuj
 public class klasa1 {
	
	public static void main(String args[] )
	{
		klasa2 b1 = new klasa2();
		klasa2 b2 = new klasa2();
		klasa2 b3 = new klasa2();
		klasa2 b4 = new klasa2();
	
		b1.up_bazy();
		b2.up_bazy();
		b3.up_bazy();
		b4.up_bazy();
	
		b1.pokazywarka();
		b2.pokazywarka();
		b3.pokazywarka();
		b4.pokazywarka();
	}	
}

Kod klasy2

4 ostatnie linie kodu maja bład chodzi o zmienne.

Kopiuj
 import java.util.Scanner;


public class klasa2 
{
	
	
	class baza
	{
		String imie;
		string nazwisko;
		int doswiadczenie;
		int zarobki;
	}

	void up_bazy()
	{
		System.out.println("Podaj imie pracownika: ");
		Scanner odczyt = new Scanner(System.in);
		String imie = odczyt.nextLine();
		
		System.out.println("Podaj nazwisko pracownika: ");
		Scanner odczyt1 = new Scanner(System.in);
		String nazwisko = odczyt1.nextLine();
		
		System.out.println("Podaj doswiadczenie pracownika: ");
		Scanner odczyt2 = new Scanner(System.in);
		int doswiadczenie = odczyt2.nextInt();
		
		System.out.println("Podaj zarobki pracownika: ");
		Scanner odczyt3 = new Scanner(System.in);
		int zarobki = odczyt3.nextInt();
	}
	
	void pokazywarka()
	{
	    
		System.out.print(imie+" ");
		System.out.print(nazwisko+" ");
		System.out.print(doswiadczenie+" ");
		System.out.print(zarobki+" ");
	}
	
}
niezdecydowany
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Bieszczady
1
Kopiuj
string nazwisko;
  • Rejestracja: dni
  • Ostatnio: dni
0

Nie rozumiem

bogdans
  • Rejestracja: dni
  • Ostatnio: dni
1

string to nie String. Java jest case-sensitive.

  • Rejestracja: dni
  • Ostatnio: dni
0

Ok poprawiłem ale metoda pokazywarka(); nadal nie działa

NO
  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
public void pokazywarka()
  • Rejestracja: dni
  • Ostatnio: dni
0

zmienne nadal sa podkreslone (po dodaniu "public")

NO
  • Rejestracja: dni
  • Ostatnio: dni
0

Zrobiłbym bez klasy wewnętrznej:

Kopiuj
public class klasa2 
{
    private String imie;
    //kolejne zmienne...
    
    void up_bazy()
    {
        System.out.println("Podaj imie pracownika: ");
        Scanner odczyt = new Scanner(System.in);
        imie = odczyt.nextLine();
        
        //kolejne odczyty
    }
 
    void pokazywarka()
    {
        System.out.print(imie+" ");
        // kolejne wydruki
    }
}

Dodatkowo w metodzie up_bazy i tak tworzysz nowe zmienne "String imie", więc do bazy i tak nie sięgały.

  • Rejestracja: dni
  • Ostatnio: dni
0

Juz prawie wszystko jest ok, tylko teraz mam problem mianowicie jest juz wszystko skompilowane ale nie pokazuje wprowadzonych danych wyswietla null, null,0 ,0

  • Rejestracja: dni
  • Ostatnio: dni
0

Wygląda na to, że zmienne nie są inicjowane nowymi wartościami. Wklej swój kod, już poprawiony.

NA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 68
0

Chyba mam pomysł na czym polega błąd. Weźmy np. samą zmienną "imie". Na samym początku masz:

Kopiuj
String imie;

Po czym w metodzie "up_bazy" ponownie deklarujesz zmienną "imie":

Kopiuj
String imie = odczyt.nextLine();

Pisząc nazwę typu przed zmienną deklarujesz ją, a skoro już wcześniej zadeklarowałeś zmienną "imie", to zrobienie tego samego w metodzie utworzy nową zmienną "imie", która tak jakby w obrębie metody przesłoni twoją główną zmienną "imie". (Nie wiem, czy poprawnie to sformułowałem, więc proszę bardziej zaawansowanych użytkowników o ewentualne poprawienie mnie).

Żeby ci to lepiej zobrazować:
Na samym początku robisz: String imię; które w domyśle przyjmuje wartość null;
Następnie w metodzie ponownie piszesz String imie...; i nadajesz tej zmiennej wartość. Dla uproszczenie przyjmijmy że ta zmienna w domyśle nazywa się 'imie2' i nie jest to to samo 'imie', co to twoje główne z początku programu. Nadajesz wartość zmiennej 'imie2', a nie zmiennej 'imie', która nadal pozostaje null.

Jak to rozwiązać? Wywal nazwy typów z metody gdzie nadajesz wartości zmiennym. To by było coś takiego:

Kopiuj
 public void up_bazy()
    {
        Scanner odczyt = new Scanner(System.in); //wystarczy ci jeden Scanner

        System.out.println("Podaj imie pracownika: ");
        imie = odczyt.nextLine();
 
        System.out.println("Podaj nazwisko pracownika: ");
        nazwisko = odczyt.nextLine();
 
        System.out.println("Podaj doswiadczenie pracownika: ");
        doswiadczenie = odczyt.nextInt();
 
        System.out.println("Podaj zarobki pracownika: ");
        zarobki = odczyt.nextInt();
    }
  • Rejestracja: dni
  • Ostatnio: dni
0

Dzieki wszystkim za pomoc pozdrawiam!

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.