代码之家  ›  专栏  ›  技术社区  ›  Baraa

而我在java中得到无限的while循环

  •  -2
  • Baraa  · 技术社区  · 2 年前

    我想写一个在二维数组中循环的代码,主要的方法是findVal,它获取一个二维数组和一个值,如果值在数组中,则返回true,我使用一个二进制搜索代码在数组的一行中循环,另一个方法在二维数组中成行向下循环,问题是当我运行一个测试程序时,它不会打开终端窗口,看起来我的循环是无限的,我的代码如下

    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。

    2 回复  |  直到 2 年前
        1
  •  2
  •   Rob Spoor    2 年前

    你的 while 身体有一个 if - else if - else 结构有三个分支。第一种使用 return 语句退出该方法,这样就不会导致无限循环。第三个增量 i 所以这最终会导致循环结束。这是第二个问题。它包含一个条件 回来 陈述但是,如果不满足该条件,则循环体会满足 没有什么 .这意味着循环条件不会改变,并且每次都选择相同的分支。

        2
  •  0
  •   Anirban Bakshi    2 年前

    您的else if条件导致循环变为无限循环。

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

    如果-1是从 linearSearch(m[i],val) .你没有增加i或j,这反过来会导致i和j的相同值在while循环中被反复计算。

    尝试做一个i++以防 linearSearch(m[i],val) == -1 这将解决无限循环的问题