扫码关注官方订阅号
小伙看你根骨奇佳,潜力无限,来学PHP伐。
问题出在构造函数上,你传入了 int N 的参数, 但是没有把这个N赋给 Percolation 的变量N,所以在后续判断的时候if (i < 1 || i > N || j < 1 || j > N) 这里面N始终为0。所以总是认为数组越界。
if (i < 1 || i > N || j < 1 || j > N)
将构造函数改成以下就可以了,只是增加了this.N = N的赋值语句。
this.N = N
public Percolation(int N) { if (N <= 0) { throw new IllegalArgumentException("N不可以小于等于0"); } grid = new int[N][N]; for (int row = 0;row < N;row++) { for (int col = 0;col < N;col++){ grid[row][col] = 0; } } wuf = new WeightedQuickUnionUF(N*N); this.N = N; }
然后第二个问题,我大概看了一眼。你把if语句删掉之后,下面的代码就陷入死循环了
do { rdRow = StdRandom.uniform(1, N+1); rdCol = StdRandom.uniform(1, N+1); } while (pc.isOpen(rdRow, rdCol) == false);
isOpen函数一直返回是true,即grid所有的元素全都是0。这也不难理解,在这一步操作之前,你只是初始化了grid矩阵,但是没有做任何赋值运算。但是你在不断的返回一个随机的rdRow和rdCol去访问这个grid的元素,所以isOpen函数始终是返回true。
so……好好debug一下你的代码……多把几步的返回结果打印出来,你就知道为啥了。
Percolation 类的N赋值了吗?似乎没有,因此你的 N被默认赋值为0 `public void open(int i, int j) {
if (i < 1 || i > N || j < 1 || j > N) { //i>N 一直成立 所以这个异常总是抛出 throw new IndexOutOfBoundsException("Row or Col index out of bounds!"); }`
你可以在
public Percolation(int N){ //在这里加个句 this.N = N; ...... }
PHP学习
技术支持
返回顶部
问题出在构造函数上,你传入了 int N 的参数, 但是没有把这个N赋给 Percolation 的变量N,所以在后续判断的时候
if (i < 1 || i > N || j < 1 || j > N)
这里面N始终为0。所以总是认为数组越界。将构造函数改成以下就可以了,只是增加了
this.N = N
的赋值语句。然后第二个问题,我大概看了一眼。你把if语句删掉之后,下面的代码就陷入死循环了
isOpen函数一直返回是true,即grid所有的元素全都是0。这也不难理解,在这一步操作之前,你只是初始化了grid矩阵,但是没有做任何赋值运算。但是你在不断的返回一个随机的rdRow和rdCol去访问这个grid的元素,所以isOpen函数始终是返回true。
so……好好debug一下你的代码……多把几步的返回结果打印出来,你就知道为啥了。
Percolation 类的N赋值了吗?似乎没有,因此你的 N被默认赋值为0
`public void open(int i, int j) {
你可以在