NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
IT rekvalifikace s podporou uplatnění. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!

Diskuze: Kontrola pritomnosti objektu v ArrayList

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Martin
Člen
Avatar
Martin:30.8.2018 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.8.2018 20:24
Avatar
Martin Petrovaj
Tvůrce
Avatar
Odpovídá na Martin
Martin Petrovaj:30.8.2018 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.8.2018 21:19
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
30.8.2018 21:18
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Martin
Člen
Avatar
Odpovídá na Martin Petrovaj
Martin:30.8.2018 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.8.2018 21:25
Avatar
Jirka
Člen
Avatar
Jirka:30.8.2018 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.8.2018 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.