Referencje do następnego obiektu w obiekcie go poprzedzający

0

Witam mam dosyć spory problem z wykonaniem Metody addGame(String game, boolean nice) w klasie Game wywołanej z głównej klasy programu CheckGame dodaje grę do systemu tworząc nowy obiekt klasy Item. Ma to działać na zasadzie takiej iż Obiekt game ma pola game, nice i nextGame - (ostatnie jest referencją do kolejnej gry)

Moje rozwiązanie-> które nie działa :> ( klasa Game):

public class Game {
String game;
boolean nice;
Game nextNext, firstGame;

public Game(String question, boolean nice){
question=this.game;
answer=this.nice;
Item next;
}

public void addGame(String game, boolean nice){
Game tmp = firstGame;
while (tmp.nextGame != null) {
tmp = tmp.nextGame;
}
tmp.nextGame = new Game(game, nice);
}
}

Oczywiście first game jest utworzona w klasie głównej jako pierwszy obiekt ma być tak GRA1(next)->GRA2(next referencją do gry3)->GRA3(next=null)

0

Musisz wprowadzić pole statyczne, które będzie wskazywało na ostatnia grę i dodać coś w stylu;

public Game(String question, boolean nice){
  nextGame = LAST_GAME;
//. inne elementy...
  LAST_GAME = this;
}
0

A nie mozesz uzyc listy (wbudowanego kontenera), albo wektora, albo przypisac im jakieś ID i np skorzystać z HashMapy (a np w Game przechowywać int'a oznaczającego ID następnej gry) ?

Poza tym Twoje rozwiazanie jest jakieś dziwne (albo ja sie jeszcze nie obudzilem):

Game_1 ma swoja liste obiektow typu Game, kazdy z tych obiektow ma takze swoja liste obiektow typu Game, i kazdy z tych obiektow ma swoja liste obiektow typu Game i ... O to Ci chodzilo ? A moze chciales, zeby ta lista byla statyczna (jedna dla wszystkich) ?

0

Chodziło o to że obiekt zawiere referencję do kolejnego obiektu - każdy po kolei ma referencję do kolejnego a ostatniego referencja next ma wartość NULL. Czyli obiekt A zawiera argment będący referencją do obiektu B, obiekt B ma referencję do C itd.

Koziołek napisał(a)

Musisz wprowadzić pole statyczne, które będzie wskazywało na ostatnia grę i dodać coś w stylu;

public Game(String question, boolean nice){
  nextGame = LAST_GAME;
//. inne elementy...
  LAST_GAME = this;
}

Ja żeby dostać się do ostatniego obiektu mam iterować po wszystkich go poprzedzajacych tj. mam A B C D żeby dostać się do C idę przez A do B i dopiero z B do c

0

@Gagus, no piszemy w końcu dość nietypowa implementację listy jednokierunkowej. Zatem tak.

Jeszcze inna metoda to tak jak mówi [losowa nazwa], przechowywać wszystkie gry w jakiejś gotowej kolekcji statycznej, a dla każdego obiektu mieć tylko referencję do identyfikatora poprzedniego elementu.

0

zgodzę się tylko kolejnego elementu a nie poprzedniego. ostatni element ma po prostu Null w referencji i stąd wiemy że ejst ostatnim obiektem listy.

0

Tu masz przykład tej klasy Game

public class Game {

    private String game;
    private boolean nice;
    protected Game nextGame;

    public Game(String question, boolean nice) {
        this.game = question;
        this.nice = nice;
    }

    public void addGame(String game, boolean nice) {
        Game tmp = this;
        while (tmp.nextGame != null) {
            tmp = tmp.nextGame;
        }
        tmp.nextGame = new Game(game, nice);
    }

    @Override
    public String toString() {
        if (nextGame != null) {
            return String.format("[Name: %s; Nice: %b; Next Game: %s]", game, nice, nextGame);
        } else {
            return String.format("[Name: %s; Nice: %b]", game, nice);
        }
    }

    public static void main(String[] args) {
        Game A = new Game("A", true);
        A.addGame("B", true);
        A.addGame("C", true);
        A.addGame("D", true);

        System.out.println(A);

        Game A1 = new Game("A1", true);
        A1.addGame("B1", true);
        A1.addGame("C2", true);
        A1.addGame("D3", true);

        System.out.println(A1);
    }
}

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