returns 布尔值的嵌套 for 循环上的死代码

Dead code on a nested for loop that returns a boolean

我正在尝试完成我们在 class 中收到的练习。该解决方案不会也不会发布,因为它没有被评估。我似乎无法弄清楚。当我 运行 这段代码时,我收到了死代码警告。这是有道理的,因为我的代码似乎不允许遍历第二个子数组。因此,当第一个子数组的所有元素都相同时,即使它们不是第二个子数组,方法 returns 为真。知道如何解决这个问题吗?我现在很迷茫。

public class Warmup2 {


public static void main(String[] args) { 
    int[][] arr = {{1,1},{6,6,7}};
    System.out.println(subArraySame(arr));
}
//method that takes a 2D-array and checks if the elements of the subarrays are all the same
public static boolean subArraySame(int[][] arr) {

    for(int i = 0; i<arr.length; i++) {
        for(int j = 0; j<arr[i].length-1; j++) {
            if(arr[i][j]==arr[i][j+1]) {
                return true;
            } else {
              return false;  
            }
        }
      }return false;

   }

 }

我猜你想要这个:

public static boolean subArraySame(int[][] arr) {
    for(int i = 0; i<arr.length; i++) {
        for(int j = 0; j < arr[i].length-1; j++) {
            if(arr[i][j] != arr[i][j+1]) {
                return false;
            }
        }
    }
    return true;
}

which returns 仅当每个子数组都包含相同的项时才为真。
您的代码在第一次迭代时终止了循环,因为 if/else 语句都包含 return.

死代码指的是第二次循环的增量(j++)。这将永远不会达到,因为声明:

if(arr[i][j]==arr[i][j+1]) {
   return true;
} else {
   return false;  
}

returns 在遇到第一个点时立即执行,即当 j=0 时,因此永远不会达到 j++