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

SeznamHracu.java verze 1.1 :-)

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 getIncrementedMaxPlayerNumber() {
        // 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 vrati prvni volne cislo
    private int getFirstFreePlayerNumber() {
        // volne bude urcite cislo, ktere vrati metoda getIncrementedMaxPlayerNumber()
        int freeNumber = getIncrementedMaxPlayerNumber();
        // pole pouzitych cisel, pouzijem freeNumber at nemusime 2x volat getIncrementedMaxPlayerNumber()
        int[] usedNumbers = new int[freeNumber];

        // v poli usedNumbers na pozici h.getCislo() si udelame znacky
        // ktera cisla mame pouzite
        for (Hrac h : seznamHracu) {
            // znacka -1
            usedNumbers[h.getCislo()] = -1;
        }

        // hledame prvni nulu v poli
        // pouzite jsou -1
        for (int i = 0; i < usedNumbers.length; i++)
            if (usedNumbers[i] == 0) {
                // prvni nula je na pozici i, nastavujeme i jako volne cislo
                freeNumber = i;
                // koncime cyklus
                break;
            }
        // vracime cislo
        return freeNumber;
    }

    // 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 prvni volne cislo
                hrac.setCislo(getFirstFreePlayerNumber());
            }
            // 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));
        s.pridejHrace(new Hrac(34));
        s.pridejHrace(new Hrac(0));
        s.pridejHrace(new Hrac(35));
        s.pridejHrace(new Hrac(0));
        s.pridejHrace(new Hrac(6));
        s.pridejHrace(new Hrac(0));
        s.pridejHrace(new Hrac(47));
        s.pridejHrace(new Hrac(0));

        // v seznamu budou hraci s cisly 2, 1, 0, 3, 34, 4, 35, 5, 6, 7, 47, 8 :-)
    }
}
Tady je vidět, jak celkem jednoduchý problém může být záludný...:-)

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