当我在 java 中无限循环时

while I'm getting infinite while loop in java

我想编写一个在二维数组中循环的代码,主要方法是 findVal,它获取一个二维数组和一个值,return如果值在数组中则为真,我使用了二进制搜索代码循环遍历数组的一行和另一种在二维数组中逐行下降的方法,问题是当我 运行 一个测试器它不打开终端 window 并且它看起来我的循环是无限的,我的代码如下

public static int linearSearch(int [] arr, int num)
    {
        int pos=0;
        while ((arr[pos]<num)&&(pos<arr.length-1))
            pos++;
        if(arr[pos]==num){return pos;}
        else {return -1;}
    }
public static boolean findVal(int [][] m, int val)
    {
        int n=m.length;
        int j=m.length-1, i=0;
        while (i<=j)
        {
            if(val == m[i][j]){return true;}
            
            else if(val > m[i][j] ){

                if(linearSearch(m[i],val) !=-1){return true;}

            }
            else{
                i++;
            }

        }

        return false;
    }

有人可以告诉我我做错了什么吗? 注意:我不能在 for 循环中使用 运行 到 n*n 的嵌套循环。

您的 while body 具有包含三个分支的 if-else if-else 结构。第一个使用 return 语句退出方法,因此不会导致无限循环。第三个递增 i 以便最终导致循环结束。这是第二个问题。它包含条件 return 语句。但是,如果不满足该条件,循环 body 将不执行任何操作。也就是说循环条件不会改变,每次都选择同一个分支

您的 else if 条件导致循环进入无限循环。

 else if(val > m[i][j] ){

                if(linearSearch(m[i],val) !=-1){return true;}

            }

如果 -1 从 linearSearch(m[i],val) 返回。您没有增加 i 或 j,这反过来导致在 while 循环中一次又一次地评估 i 和 j 的相同值。

尝试执行 i++,以防来自 linearSearch(m[i],val) == -1 的值将解决无限循环问题