Мертвый код во вложенном цикле for, который возвращает логическое значение - PullRequest
0 голосов
/ 18 ноября 2018

Я пытаюсь выполнить упражнение, которое мы получили в классе. Решение не было и никогда не будет опубликовано, поскольку оно не оценивается. Я не могу понять это. Когда я запускаю этот код, я получаю предупреждение о мертвом коде. Это имеет смысл, потому что мой код, похоже, не позволяет перебирать второй подмассив. Таким образом, когда все элементы одинаковы для первого подмассива, даже если они не для второго, метод возвращает true. Есть идеи, как это исправить? Я довольно потерян в этот момент.

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;

   }

 }

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

Мертвый код относится к приращению (j++) второго цикла. Это никогда не будет достигнуто с момента утверждения:

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

возвращается немедленно в первой точке, где оно выполнено, т.е. когда j=0, следовательно, j++ никогда не будет достигнуто.

0 голосов
/ 18 ноября 2018

Я думаю, вы хотите это:

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;
}

, который возвращает true, только если каждый подмассив состоит из равных элементов.
Ваш код завершил цикл на 1-й итерации, потому что оба оператора if/else содержали return.

...