Avatar
adam440
Redaktor
Avatar
adam440:

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:

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
Redaktor
Avatar
Odpovídá na Neaktivní uživatel
adam440:

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:

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:
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  +1 28.1.2015 19:04
Neaktivní uživatelský účet
Avatar
adam440
Redaktor
Avatar
Odpovídá na Neaktivní uživatel
adam440:

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:

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):

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
Nesnáším {}, proto se jim vyhýbám.
Avatar
Odpovídá na MrPabloz
Neaktivní uživatel:

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
Člen
Avatar
Odpovídá na MrPabloz
Atrament:

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.