Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Java - seznam

1)
Stačí udělat Zastavka[] zastavky = null;

2)Tvoje metoda funguje jenom do 99, a navíc nevím jestli dobře...:-) Tady máš odzkoušený a okomentovaný kód, včera jsem tam měl chybu.
Hrac.java

public class Hrac {

    private int cislo;

    public Hrac(int cislo) {
        this.cislo = cislo;
    }

    public int getCislo() {
        return cislo;
    }

    public void setCislo(int number) {
        this.cislo = number;
    }
}

SeznamHracu.java
import java.util.ArrayList;
import java.util.List;

public class SeznamHracu {

    private List<Hrac> seznamHracu = new ArrayList<Hrac>();

    // pomocna metoda
    // najde maximalni cislo v seznamu hracu a vrati o jedno vetsi
    private int getFreePlayerNumber() {
        // pokud je seznamhracu prazdny vratime nulu
        if (seznamHracu.size() == 0) {
            return 0;
        }

        // docasne si ulozime cislo prvniho hrace v seznamu
        int playerNumber = seznamHracu.get(0).getCislo();

        // projdeme seznam od druheho hrace
        for (int i = 1; i < seznamHracu.size(); i++) {
            // aktualni hrac
            Hrac h = seznamHracu.get(i);
            // pokud je cislo aktualniho hrace vetsi, nez docasne ulozene cislo
            // aktualizujeme docasne ulozene cislo
            // typicky zpusob hledani maxima
            if (h.getCislo() > playerNumber) {
                playerNumber = h.getCislo();
            }
        }

        // ted by melo byt v playerNumber maximalni cislo hrace v seznamu
        // vracime o jedno vice
        return playerNumber + 1;
    }

    // pomocna metoda, zjistuje jestli uz je v seznamu hrac
    // s urcitym cislem
    private boolean containsPlayerNumber(int playerNumber) {
        for (Hrac cokoli1 : seznamHracu) {
            if (cokoli1.getCislo() == playerNumber) {
                return true;
            }
        }
        return false;
    }

    // prida hrace
    public boolean pridejHrace(Hrac hrac) {
        // je cislo hrace ktereho chceme pridat 0?
        if (hrac.getCislo() == 0) {
            // mame uz hrace s 0 v seznamu?
            if (containsPlayerNumber(0)) {
                // pokud ano, dame mu jine cislo
                hrac.setCislo(getFreePlayerNumber());
            }
            // pridame hrace do seznamu.
            seznamHracu.add(hrac);
            return true;
        }

        // obsauje seznam cislo hrace, ktereho chceme pridat?
        if (!containsPlayerNumber(hrac.getCislo())) {
            // pokud ne, muzem pridat
            seznamHracu.add(hrac);
            return true;
        }
        // hrac je v seznamu, nepridavame nic, vracime false
        return false;
    }

    public static void main(String[] args) {
        SeznamHracu s = new SeznamHracu();
        s.pridejHrace(new Hrac(2));
        s.pridejHrace(new Hrac(1));
        s.pridejHrace(new Hrac(0));
        s.pridejHrace(new Hrac(0));

        // v seznamu budou hraci s cisly 2, 1, 0 a 3
    }
}
Těch privátních metody se neboj, nebudou na venek vidět. Dělám je proto, aby byl kód přehlednější a implementace metod co nejkratší.

EDIT: No, teď vidím i v tom mém řešení potenciální problém:
1) přidám hráče s číslem 1, přidá se
2) přidám hráče s číslem 34, přidá se
3) přidám hráče s číslem 0, přidá se s číslem 35
4) přidám dalšího hráče s číslem 0, přidá se s číslem 36

chtělo by to vychytat, ale zadání to myslím splňuje...:-)

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny