Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我在while循环中得到一个带有嵌套if语句的无限循环?_Java - Fatal编程技术网

Java 为什么我在while循环中得到一个带有嵌套if语句的无限循环?

Java 为什么我在while循环中得到一个带有嵌套if语句的无限循环?,java,Java,我一直在研究你们中的一些人以前可能遇到的渗流问题。你在网格中打开站点,一旦水可以流过连续的开放站点,系统就会渗滤。在PercolationStats文件中,创建一个大小为NxN的网格,并随机打开站点,直到其渗透。你存储了过滤所需的站点数量,并运行了T次实验。一旦您完成了所有的T实验,您就可以输出网格过滤之前随机打开站点所需的平均次数 我几乎完成了,但现在我的循环卡住了 有趣的是,它只有在N>1时才会被卡住。如果N=1,则程序运行正常 我尝试过很多随机的想法,比如改变StdRandom(1,N+1

我一直在研究你们中的一些人以前可能遇到的渗流问题。你在网格中打开站点,一旦水可以流过连续的开放站点,系统就会渗滤。在PercolationStats文件中,创建一个大小为NxN的网格,并随机打开站点,直到其渗透。你存储了过滤所需的站点数量,并运行了T次实验。一旦您完成了所有的T实验,您就可以输出网格过滤之前随机打开站点所需的平均次数

我几乎完成了,但现在我的循环卡住了 有趣的是,它只有在N>1时才会被卡住。如果N=1,则程序运行正常

我尝试过很多随机的想法,比如改变StdRandom(1,N+1)或(1,N)中的输入。我还试着在循环内、循环外切换代码行,等等

    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