Моя программа использует StdDraw для создания сетки N-by-N. Я должен принимать N и T в командной строке (N - количество строк в сетке, T - количество раз, когда я могу попытаться избежать сетки в случайном блуждании). Я получаю сообщение об ошибке, которая говорит:Проблемы с булевым массивом в программе самообвинения в случайной прогулке?
Exception in thread "main" java.lang.NegativeArraySizeException
at RandomWalk.main(RandomWalk.java:28)
Моя программа выглядит следующим образом:
import java.util.Random;
public class RandomWalk {
public static void main(String[] args) {
int N = Integer.parseInt(args[0]);
int T = Integer.parseInt(args[1]);
int tempN = N;
int DEcount = 0; //Dead End Count
int x0 = N/2;
int y0 = N/2;
int x1 = x0;
int y1 = y0;
StdDraw.setXscale(0.0, N);
StdDraw.setYscale(0.0, N);
StdDraw.setPenColor(StdDraw.GRAY);
StdDraw.setPenRadius(0.002);
while (N >= 0) {
StdDraw.line(tempN, N, 0, N);
N--;
}
StdDraw.setPenColor(StdDraw.GRAY);
StdDraw.setPenRadius(0.002);
N = tempN;
while (N >= 0) {
StdDraw.line(N, tempN, N, 0);
N--;
}
for (int i = 0; i < T; i++) {
boolean[][] check = new boolean[N][N];
while (x1 > 0 && x1 < N-1 && y1 > 0 && y1 < N-1) {
//check for dead ends and make a random move
check[x1][y1] = true;
if (check[x1-1][y1] && check[x1+1][y1] && check[x1][y1-1] && check[x1][y1+1]) {
DEcount++;
break;
}
double rand = Math.random();
if (rand < 0.25) { if (!check[x1+1][y1]) x1++;}
else if (rand < 0.50) { if (!check[x1-1][y1]) x1--;}
else if (rand < 0.75) { if (!check[x1][y1+1]) y1++;}
else if (rand < 1.00) { if (!check[x1][y1-1]) y1--;}
StdDraw.setPenColor(StdDraw.RED);
StdDraw.setPenRadius(0.01);
StdDraw.line(x0, y0, x1, y1);
x0 = x1;
y0 = y1;
}
}
}
}
Кроме того, что я должен быть печать на сетке (красные линии, которые представляют собой случайное блуждание) не печатаются. Однако сама сетка печатает.
Может ли кто-нибудь помочь мне выяснить, что я делаю неправильно?
Справка приветствуется.
Извините, неправильный анализ для выпуска 2. – collapsar