Odwolania do obiektow

Odpowiedz Nowy wątek
2018-12-13 22:11
0

Tym razem postanowilem przeanalizowac inny przyklad z ksiazki - niestety ani wczoraj ani dzis nie wiem skad biora sie obiekty "id", bo w końcu int id=0, więc skąd obiekty id 1, 2 oraz 3? Czy ktos potrafi wyjasnic krok po kroku jak krowie na rowie o co tutaj chodzi? Skad biora sie odwolania do obiektow id.1 id.2 oraz id.3, ktore istnieja i dlaczego zmienne referencyjne 0 oraz 2 są null? Probowalem to zrozumiec krok po kroku za pomoca debuggera w Eclipse, ale chyba nie do konca wiem jeszcze jak korzystac prawidlowo z narzedzia i czy debuger pokaze mi jak kompiluje kod krok po kroku, dlatego pytam Was.

class KwizGoraProblemow {
    int id = 0;

    public static void main(String[] args) {
        int x = 0;
        KwizGoraProblemow[] kwz = new KwizGoraProblemow[5];

        while (x < 3) {
            kwz[x] = new KwizGoraProblemow();
            kwz[x].id = x;
            x = x + 1;

        }
        kwz[3] = kwz[1];
        kwz[4] = kwz[1];
        kwz[3] = null;
        kwz[4] = kwz[0];
        kwz[0] = kwz[3];
        kwz[3] = kwz[2];
        kwz[2] = kwz[0];
            System.out.println(kwz[2].id);
    }

}

screenshot-20181213220255.png

Pozostało 580 znaków

2018-12-13 22:21
0

Przecież ustawiłeś id tutaj:

 while (x < 3) {
            kwz[x] = new KwizGoraProblemow();
            kwz[x].id = x;
            x = x + 1;

        }

W ogóle to czmeu taki while a nie for?
A później referencjami żągłowałes i jakies ustawiłeś na nulle, ale nie chciało mi się śledzić jak. Polecam robić coś z większym skupieniem, a poza tym sąde że eclipse musi być zniszczony


Nie pomagam przez PM. Pytania zadaje się na forum.
Bardziej rozumiem skad x i jak on zachowuje sie w kolejnych sekwencjach, ale nie widze bezposredniego powiazania by ten program mial tworzyc 3 rozne obiekty ID, a przeciez tworzy. - dopfz 2018-12-13 22:24

Pozostało 580 znaków

2018-12-13 22:34
1

Stworzyłeś w pętli trzy obiekty, A w ogóle jak może być dobrze, skoro Piszesz w eclipse i na białym tle?!


Generalnie wole Netbeansa, a co do tla to nie bawilem sie w ustawienia programu. Pragne sie nauczyc Javy, na ustawienia takich blahostek przyjdzie jeszcze czas. - dopfz 2018-12-13 22:38
back to old school - hcubyc 2018-12-14 00:27

Pozostało 580 znaków

2018-12-14 12:46
0

I co nikt nie wie jak to wytlumaczyc?

Pozostało 580 znaków

2018-12-14 13:05

Utworzyłeś tablicę pięcioelementową obiektów KwizGoraProblemow (nazwa aż prosi o problemy :-D):
KwizGoraProblemow[] kwz = new KwizGoraProblemow[5];.
Po czym zainicjalizowałeś je w pętli, nadając, (trzem pierwszym, dokładnie) jednoczesnie atrybuty id, następnie pokopiowałeś do reszty. Zaś id, jako atrybut struktury, nie ma nic wspólnego ze zmienną id stąd: int id = 0.


Pozostało 580 znaków

2018-12-14 13:07
eL
1
dopfz napisał(a):

skad biora sie obiekty "id", bo w końcu int id=0, więc skąd obiekty id 1, 2 oraz 3?

Twoje id tylko inicjujesz jako 0 ale potem w pętli je zmieniasz:

dopfz napisał(a):
    while (x < 3) {
        kwz[x] = new KwizGoraProblemow();
        kwz[x].id = x;
        x = x + 1;
    }

Twoje id jest zawsze takie samo jak x. Skoro x robic +1 to i id jest +1 i stąd też rośnie.

dopfz napisał(a):

dlaczego zmienne referencyjne 0 oraz 2 są null?

Bo sam tak nakombinowałeś... No ale po kolei.

  1. Najpierw tworzysz tablicę 5 elementową
  2. Pętle while wykonujesz 3 razy i inicjujesz 3 pierwsze elementy:

title

  1. No a potem to sobie już sam tymi referencjami żonglujesz...
  2. kwz[3] = kwz[1]; do elementu o indeksie 3 który wcześniej był null (patrz wyżej na screena) przypisujesz element z index 1. W tym momencie 1,2,3,4 jest więc wypełniony a 5 jest null (z tym że 1 i 3 wskazuje na tę samo miejsce w pamięci).
  3. kwz[4] = kwz[1]; jak wyżej i teraz masz całą tablicę bez nulli ale nadal 1, 3 i 4 ma to samo wskazanie.
  4. kwz[3] = null; do elementu z tablicy z indexem 3 sam wstawiasz nulla
  5. kwz[0] = kwz[3]; a potem tego nulla wrzucasz także do kolejnego miejsca...

I tak dalej i tak dalej... Wszystko działa jak działać powinno. Postaw raz jeszcze sobie break pointy i po prostu krok po kroku patrz co się dzieje ze zmiennymi...

Ok przeanalizuje to raz jeszcze w domu. Breaki sa dobrym pomyslem. Dziekuje za wyjasnienie. Nie byłem pewny czy id tez mam traktowac jako wartosc x pomimo ze kwz[x].id = x. Probowalem analizowac na wszystkie sposoby, ale zaczelo mi sie mieszac przy kwz = innemu kwz. - dopfz 2018-12-14 13:18
Skoro robisz takie wywołanie kwz[x].id = x a niżej masz też x = x + 1; to nawet drogą dedukcji powinieneś wiedzieć że skoro id = x a x = x + 1 to wówczas id też będzie zawsze +1. - eL 2018-12-14 13:20
Zapewniam Ciebie, ze tak wlasnie myslalem na samym poczatku bez "zajakniecia", ale jak zobaczylem co jest po curly bracket to juz zwatpilem jak to czytac. - dopfz 2018-12-14 23:12

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