Black Friday Black Friday
Black Friday výprodej! Až 80 % extra bodů zdarma! Více informací zde

Diskuze: Kontrola pritomnosti objektu v ArrayList

Java Java Kontrola pritomnosti objektu v ArrayList American English version English version

Aktivity (1)
Avatar
Martin
Člen
Avatar
Martin:30. srpna 20:24

Zdravím,

mám objekt triedy Hráč v ktorej je uchovaný ArrayList s objektmi triedy Predmet. Do tohto zoznamu je v priebehu hry uložený Predmet, napríklad predmet1 (okrem iného).

V triede Hráč je metóda, ktorá vráti true, ak sa v zozname predmetov, nachádza predmet, predaný ako parameter. Neviem sa však dostať k tomu, ako zadať práve ten predmet pri volaní tej metódy.

Zkusil jsem: Zoznam je definovaný v triede a vytvorený v konštruktore:

private ArrayList<Predmet> predmety;
this.predmety = new ArrayList<>();

Metóda, ktorá vráti true, ak je predmet v zozname

public boolean checkPredmet(Predmet predmet) {
        if (this.predmety.contains(predmet)) return true;
        return false;
    }

Tu som sa zasekol

hra.getHrac().checkPredmet(????);

Objekt predmet1 triedy Predmet bol vytvorený a priradený k objektu miestnost3 a tá bola uložená v zozname v objekte triedy Hra, celé a to však uskutočnilo v statickej metóde inej triedy (Inicializácia)

Predmet predmet1 = new Predmet("Kľúč", 1);
miestnost3.setPredmet(predmet1);

Problém je že v aktuálnej triede, kde prebieha kontrola hry nie je predmet1 známy.

Chci docílit: V ľudskej reči - potrebujem preveriť, či sa v batohu hráča nachádza kľúč. Je chybou, že chcem mať inicializáciu v inej triede? Viem nejako predať aktuálnej triede ten objekt predmet1? Preto že v podstate nemám čo porovnávať (alebo poslať na porovnanie).

Ďakujem za rady.

 
Odpovědět 30. srpna 20:24
Avatar
Martin Petrovaj
Překladatel
Avatar
Odpovídá na Martin
Martin Petrovaj:30. srpna 21:18

Prečo proste nevyhľadáš predmet v inventári podľa jeho mena? Prípadne jeho iných vlastností, ktoré na to môžu byť vhodnejšie / potrebné.

Editováno 30. srpna 21:19
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 30. srpna 21:18
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Martin
Člen
Avatar
Odpovídá na Martin Petrovaj
Martin:30. srpna 21:25

Dalo by sa to tak, prípadne podľa ID predmetu. Asi to bude aj jednoduchšie.
Čisto teoreticky - dalo by sa to nejak reálne spraviť aj s porovnaním objektov?

 
Nahoru Odpovědět 30. srpna 21:25
Avatar
Jirka
Člen
Avatar
Jirka:30. srpna 22:06

Ahoj,
já bych asi vytvořil kontejner obsahující všechny Predmety ve hře, který by zapouzdřoval ArrayList s Predmety a ten by i hlídal integritu, tzn. duplicity a konzistenci.

Dále bych asi vytvořil podobný kontejner Predmety u Hrace, coz by sice vedlo k duplicitním linkům, ale nemuselo by se vždy procházet vsechny Predmety ve hře, ovšem také s kontrolou integrity.

Myslím, že by se potom mohlo i porovnávat objekty.

Nahoru Odpovědět 30. srpna 22:06
Kdo nic nedělá, nic nezkazí.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.