Wątek przeniesiony 2014-12-14 18:38 z przez bogdans. Powód: Wątek dotyczący podstaw

Błędy czyli moje pierwsze zderzenie z klasami

Odpowiedz Nowy wątek
2014-12-14 18:24
Szybki Roland
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+" ");
    }
 
}
edytowany 1x, ostatnio: bogdans, 2016-12-13 18:26
Wstawiaj kod w znaczniki <code=java> </code>. - bogdans 2014-12-14 18:37
Poza tym w tagach podawaj takie informacje jak nazwa języka/środowiska/technologii; - furious programming 2014-12-14 18:57

Pozostało 580 znaków

2014-12-14 18:27
1
string nazwisko;

"Perhaps surprisingly, concurrent programming isn’t so much about threads or
locks, any more than civil engineering is about rivets and I-beams."

Pozostało 580 znaków

2014-12-14 18:33
Szybki Roland
0

Nie rozumiem

Pozostało 580 znaków

2014-12-14 18:36
1

string to nie String. Java jest case-sensitive.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

2014-12-14 18:44
Szybki Roland
0

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

PISZ JAKIE BŁĘDY DŻSISASDASDASD - niezdecydowany 2014-12-14 19:17

Pozostało 580 znaków

2014-12-14 18:47
0
public void pokazywarka()
Post przywracam, bo pojawił się następny, który się do niego odnosi; - furious programming 2014-12-14 18:58

Pozostało 580 znaków

2014-12-14 18:49
Szybki Roland
0

zmienne nadal sa podkreslone (po dodaniu "public")

Pozostało 580 znaków

2014-12-14 19:07
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.

edytowany 1x, ostatnio: novpet, 2014-12-14 19:09

Pozostało 580 znaków

2014-12-14 20:34
Szybki Roland
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

Pozostało 580 znaków

2014-12-14 22:19
Mały Samiec
0

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

Pozostało 580 znaków

2014-12-15 01:35
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();
    }
edytowany 3x, ostatnio: Naitoreivun, 2014-12-15 01:37

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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