Odwolania do obiektow

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

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

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?!

0

I co nikt nie wie jak to wytlumaczyc?

1

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.

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...

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