Java 为什么我在while循环中得到一个带有嵌套if语句的无限循环?
我一直在研究你们中的一些人以前可能遇到的渗流问题。你在网格中打开站点,一旦水可以流过连续的开放站点,系统就会渗滤。在PercolationStats文件中,创建一个大小为NxN的网格,并随机打开站点,直到其渗透。你存储了过滤所需的站点数量,并运行了T次实验。一旦您完成了所有的T实验,您就可以输出网格过滤之前随机打开站点所需的平均次数 我几乎完成了,但现在我的循环卡住了 有趣的是,它只有在N>1时才会被卡住。如果N=1,则程序运行正常 我尝试过很多随机的想法,比如改变StdRandom(1,N+1)或(1,N)中的输入。我还试着在循环内、循环外切换代码行,等等Java 为什么我在while循环中得到一个带有嵌套if语句的无限循环?,java,Java,我一直在研究你们中的一些人以前可能遇到的渗流问题。你在网格中打开站点,一旦水可以流过连续的开放站点,系统就会渗滤。在PercolationStats文件中,创建一个大小为NxN的网格,并随机打开站点,直到其渗透。你存储了过滤所需的站点数量,并运行了T次实验。一旦您完成了所有的T实验,您就可以输出网格过滤之前随机打开站点所需的平均次数 我几乎完成了,但现在我的循环卡住了 有趣的是,它只有在N>1时才会被卡住。如果N=1,则程序运行正常 我尝试过很多随机的想法,比如改变StdRandom(1,N+1
public New_PercolationStats(int N, int T) {
if (N <= 0 || T <= 0)
throw new IllegalArgumentException();
t = T;
int sites = 0;
int open = 0;
results = new double[t];
for (int x = 0; x < t; x++) {
percolation = new New_Percolation(N);
while(!percolation.percolates()) {
int i = StdRandom.uniform(0, N);
int j = StdRandom.uniform(0, N);
int k = StdRandom.uniform(1, 4);
open++;
if (percolation.isOpen(i, j) == false) {
percolation.open(i, j, k);
sites++;
}
}
double result = (double) sites / (N * N);
results[x] = result;
}
}
public New_PercolationStats(int N,int T){
如果(N如果它卡在while
循环中,那么问题一定是percolation.percolates()
永远不会返回true。要么是该方法存在问题,要么是循环中的其余代码需要更改它没有更改的内容。感谢大家的反馈。真正的答案是,网格中填充的数字很可能不会真正渗透。比如2x2网格这:
|1 2 |
|2.1|
然后程序将永远不会检测到任何空格是打开的,因此它将永远继续为i、j、k生成数字。当percolation.percolates()
返回true
?您是否确保它没有bug?我注意到您在循环中从未更新percolation
。