Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Inicializace více tříd v Javě

Aktivity
Avatar
adam440
Tvůrce
Avatar
adam440:28.1.2015 18:26

Zdravím,
potýkám se s problémem jak inicializovat více tříd v Javě. Ten problém je v tom že těch tříd je několik tisíc (5000 AI hráčů), musí jít použít po celé třídě (lepší řešení asi není - v jedné metodě by toho bylo strašně moc) a navíc inicializované třídy mají několik parametrů. Jsem si téměř jist že je i lepší řešení než tam mít 5000 krát napsáno inicializaci...

 
Odpovědět
28.1.2015 18:26
Avatar
Odpovídá na adam440
Neaktivní uživatel:28.1.2015 18:40

hovorí ti niečo pole(prípadne iná vhodnejšia kolekcia) a cyklus? písať 5000 riadkov inicializácie, to chce guráž o_O

Nahoru Odpovědět
28.1.2015 18:40
Neaktivní uživatelský účet
Avatar
adam440
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
adam440:28.1.2015 18:45

Ano, ale ani na Stackoverflow sem nenašel řešení. Vím že to lze inicializovat jako pole tříd a přes cyklus zavolat konstruktory ale jenom v metodě. Avšak já se ptám jestli by to šlo naprogramovat tak aby to platilo pro celou třídu.

 
Nahoru Odpovědět
28.1.2015 18:45
Avatar
Odpovídá na adam440
Neaktivní uživatel:28.1.2015 18:57

no veď to pole daj ako ako atribút triedy (a v konštruktori ho inicializuj pomocou cyklu nie?

Nahoru Odpovědět
28.1.2015 18:57
Neaktivní uživatelský účet
Avatar
Odpovídá na adam440
Neaktivní uživatel:28.1.2015 19:04
public class Player {
    public Player(){
        ...
    }
}

public class Game {
    private Player[] players;
    public Game(){
        this.players = new Player[5000];
        for(int i = 0; i < this.players.length)
            this.players[i] = new Player();
    }
}
Nahoru Odpovědět
28.1.2015 19:04
Neaktivní uživatelský účet
Avatar
adam440
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
adam440:28.1.2015 19:21

Moc díky, takhle už to funguje jak má :) .

 
Nahoru Odpovědět
28.1.2015 19:21
Avatar
MrPabloz
Člen
Avatar
Odpovídá na Neaktivní uživatel
MrPabloz:28.1.2015 21:17

A co když jich bude 5001? bude muset zvětšovat pole? Není jednoduší to hodit do kolekce? :)

public class Player {
     public Player(){
         ...
     }
 }

 public class Game {
     private List<Player> players;
     public Game(){
         this.players = new ArrayList<Player>();
         for(int i = 0; i < this.players.length)
             this.players.add(new Player());
     }
 }
Nahoru Odpovědět
28.1.2015 21:17
Harmonie těla a duše, to je to, oč se snažím! :)
Avatar
Odpovídá na MrPabloz
Michal Žůrek - misaz:28.1.2015 21:36

samozřejmě je to výhodnější, ale za to několikrát více paměťově náročnější.

 
Nahoru Odpovědět
28.1.2015 21:36
Avatar
Odpovídá na MrPabloz
Neaktivní uživatel:28.1.2015 22:05

samozrejme, že keď ich je premenlivý počet, tak je List jasná voľba, ale ja som odpovedal na jeho 5000.. dve verzie sa mi nechcelo písať

Nahoru Odpovědět
28.1.2015 22:05
Neaktivní uživatelský účet
Avatar
Atrament
Tvůrce
Avatar
Odpovídá na MrPabloz
Atrament:28.1.2015 23:10

Velikost Listu se zjišťuje pomocí funkce size() a ne pomocí length. Navíc tak jak to máš ti to vytváří prázdný list, podívej se pořádně na to for a pochopíš proč :) Ale jinak souhlasím s tím, že by byl List vhodnější než pole, paměťově to samozřejmě vyjde úplně nastejno (vždyť to ukládá stejná data) a je to daleko pružnější.

 
Nahoru Odpovědět
28.1.2015 23:10
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 10 zpráv z 10.