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