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.javaimport 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...
