java - 自回避随机游走程序中布尔 array的问题?

  显示原文与译文双语对照的内容
0 0

我的程序使用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;
 }
 }
 }
}

另外,我打算在网格( 代表随机游走的红线) 上打印的内容不打印。 网格本身也会打印出来。

谁能帮我找出我在做什么?

感谢你的帮助。

时间: 原作者:

0 0

考虑以下代码 fragment:


 while (N> = 0) {
 StdDraw.line(N, tempN, N, 0); 
 N--;
 }
 for (int i = 0; i <T; i++) {
 boolean[][] check = new boolean[N][N];

在while循环的末尾,N 是 -1,然后你将它用作 array 大小。

你可能打算使用 tempN,它似乎保留了 N 。 为了避免这种问题,我建议使用更具描述性的名称。

原作者:
0 0
  • 问题 1: 在你的while循环中,你会递减变量 N 直到它的-1 。 它的下一个用途是在分配 check 时作为 array 大小说明符。 我想你忘记了另外一个分配 N = tempN 在循环之前。
原作者:
...