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

Błędy czyli moje pierwsze zderzenie z klasami

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

 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.

 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+" ");
	}
	
}
1
string nazwisko;
0

Nie rozumiem

1

string to nie String. Java jest case-sensitive.

0

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

0
public void pokazywarka()
0

zmienne nadal sa podkreslone (po dodaniu "public")

0

Zrobiłbym bez klasy wewnętrznej:

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.

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

0

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

0

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

String imie;

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

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:

 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();
    }
0

Dzieki wszystkim za pomoc pozdrawiam!

1 użytkowników online, w tym zalogowanych: 0, gości: 1