Witam, dziś napotkałem dosć dziwny błąd... Mianowicie generator pseudolosowy losuje mi lekko poza przedziałem. Przykładowo mam tablice o długości 11, i chcę by losowało do niej numerek od 1 do 11. Stwarzam obiekt klasy random i metodą nextInt losuję. r.nextInt(długość-1)+1;
Tu zamieszczę kod, wyszczególnię linijki, w których moim zdaniem coś nie gra.
public void okretyCPU(String[][] poleCPU, int[] iloscStatkow) {
Random r = new Random();
do {
for (int n = 1; n < iloscStatkow.length; n++) { // różne statki
for (int m = 1; m <= iloscStatkow[n]; m++) { // te same statki
for (int k = 1; k <= n; k++) { // po ilości masztów
do {
sprawdz = false;
warunek = true;
a = r.nextInt(poleCPU.length-1)+1; //<----------------------------
b = r.nextInt(poleCPU[0].length-1)+1; //<-----------------------------------
if (k != 1) {
konwersja(propozycje2.get(r.nextInt(propozycje2.size())));
}
if ((!uzyte2.contains(konwersja2(a, b)) && propozycje2.contains(konwersja2(a, b)))
|| (k == 1 && !(uzyte2.contains(konwersja2(a, b))))) {
outerLoop: for (int i = a - 1; i <= a + 1; i++) {
for (int j = b - 1; j <= b + 1; j++) {
if ((i >= 1 && i <= (poleCPU.length - 1)) && j >= 1
&& j <= (poleCPU[0].length - 1)) {
if (poleCPU[i][j].equals(" ")) {
sprawdz = true;
} else if (poleCPU[i][j].equals("X")
&& !(uzyte2.contains(konwersja2(i, j)))) {
sprawdz = false;
warunek = false;
break outerLoop;
}
}
}
}
} else if (uzyte2.contains(konwersja2(a, b))) {
//System.out.println("Na tej pozycji znajduje sie już statek!");
warunek = false;
} else if (!uzyte2.contains(konwersja2(a, b)) && !(propozycje2.contains(konwersja2(a, b)))
&& k != 1) {
//System.out.println("Maszty statku muszą znajdować sie koło siebie!");
warunek = false;
}
} while (sprawdz == false);
System.out.println(a);
System.out.println(b);
poleCPU[a][b] = postawMaszt();//<-----------indeks za duży
uzyte2.add(konwersja2(a, b));
propozycje2.remove(tekst);
for (int l = -1; l <= 1; l += 2) {
if (!(propozycje2.contains(konwersja2(a + l, b)))
&& !(uzyte2.contains(konwersja2(a + l, b))))
propozycje2.add(konwersja2(a + l, b));
if (!(propozycje2.contains(konwersja2(a, b + l)))
&& !(uzyte2.contains(konwersja2(a, b + l))))
propozycje2.add(konwersja2(a, b + l));
}
if (propozycje2.isEmpty() && k != iloscMasztow) {
for (int i = (3 - 2); i < poleCPU.length; i++) {
for (int j = 1; j < poleCPU.length; j++) {
poleCPU[i][j] = " ";
sprawdz3 = false;
}
}
}
}
propozycje2.clear();
}
}
if (sprawdz == false){
for(int i=1; i<poleCPU.length; i++){
for(int j=0; j<poleCPU[i].length; j++){
poleCPU[i][j] = " ";
}
}
uzyte.clear();
}
} while (sprawdz3 == false);
}
Obiekt klasy Random losuje mi o 1 za dużo i próbuje wcisnąć indeks 11 do tablicy i wszystko się sypie.