Warunek który napisałeś w while sprawdza tylko pierwszy i ostatni element Twojej tablicy.
Zauważ, że gdy rozpoczyna się pętla zmienne i i j mają wartość początkową, następnie w bloku pętli while mielisz sobie, mielisz, i w tym mieleniu obie zmienne przyjmują maksymalne wartości równe rozmiarowi tablicy. Po czym kończy się blok while i sprawdzany jest element ostatni w warunku while.Rozumiesz?
Ja bym to zrobił tak:
1. Dodał zmienną boolean jako warunek do pętli while.
2. Pod koniec pętli ustawiał warunek na true i sprawdzał każdy element tablicy czy jest równy 3.
3. Jeśli choć jeden nie jest równy 3 zmieniamy flagę na false i powtarzamy pętlę.
Poniżej zmodyfikowany kod, nie sprawdzałem w kompilatorze ale ideę powinieneś złapać ;)
public static void testowy() {
int min = -1;
int max = 1;
int range = max - min + 1;
boolean done = false;
while (done == false) {
przesunMyszKolumna = (int) (Math.random() * range) + min;
przesunMyszWiersz = (int) (Math.random() * range) + min;
przesunMyszKolumnaJezeliZeroY = (int) (Math.random() * 2);
przesunMyszKolumnaJezeliZeroX = (int) (Math.random() - 2);
for (i = 0; i < tab.length; i++) {
for (j = 0; j < tab[i].length; j++) {
if (tab[i][j] == 2) {
tab[polozenieMyszyKolumna][polozenieMyszyWiersz] = tabMysz[0];
tab[i][j] = 3;
}
System.out.print(tab[i][j] + "\t");
}
System.out.println();
}
if (polozenieMyszyKolumna > 0 & polozenieMyszyWiersz < tab.length) {
polozenieMyszyKolumna = polozenieMyszyKolumna + przesunMyszKolumna;
polozenieMyszyWiersz = polozenieMyszyWiersz + przesunMyszWiersz;
tab[polozenieMyszyKolumna][polozenieMyszyWiersz] = 2;
} else {
if (polozenieMyszyKolumna == 0) {
polozenieMyszyKolumna = polozenieMyszyKolumna + przesunMyszKolumnaJezeliZeroY;
tab[polozenieMyszyKolumna][polozenieMyszyWiersz] = 2;
} else {
polozenieMyszyKolumna = polozenieMyszyWiersz + przesunMyszKolumnaJezeliZeroX;
tab[polozenieMyszyKolumna][polozenieMyszyWiersz] = 2;
}
}
done = true;
for (int x;x<tab.length;x++) {
for(int y;y<tab[x].length;y++) {
if (tab[x][y] != 3) {
done = false;
break;
}
}
}
}