Проверка элементов 2D-массива - PullRequest
0 голосов
/ 29 мая 2020

Мой код для проверки того, что элемент не превышает 100 или меньше 0:

        boolean test = true

        for(int i = 0; i < inArray.length; i++){
            for(int j = 0; j < inArray[0].length; j++){ 
                if(inArray[i][j] <= 1 &&  inArray[i][j] >= 100){    
                    test = false;

                }
            }
        }

        return test;

За исключением того, что неважно, какой ввод является ответ всегда истинным

Мой ввод array равно

                {12, 1331, 23, 5, 1, 3},
                {22, 23, 231, 21312, 1, 3},
                {23, 31, 343, 3432, 1, 3},
                {42, 12, 5454, 1212, 3, 9}

test should = false, если я введу это «нет»?

Правила колледжа означают, что я не могу использовать break; или return где-либо, кроме конца подпрограммы модуль

Ответы [ 2 ]

1 голос
/ 29 мая 2020

У вас здесь три проблемы, две из которых критические. Во-первых, если вы хотите перебрать каждый подмассив, каждый раз проверяйте его длину , а не длину array [0]. И во-вторых, целые числа не могут быть меньше 2 и больше 99, поэтому ваше условное (inArray[i][j] <= 1 && inArray[i][j] >= 100) никогда не сработает.

Однако здесь есть кое-что еще: если ваш тест чисто чтобы узнать, действителен ли ваш 2-мерный массив, не выполняйте больше работы, чем необходимо. Вы можете буквально остановиться, как только найдете хоть один плохой элемент. Теперь мы могли бы сделать это, добавив проверку к вашим for условным выражениям. Например, мы можем переименовать вашу переменную в valid (потому что вы должны называть переменные после того, что они представляют), а затем мы можем обновить ваш внешний l oop до for(int i=0; valid && i < arr.length; i++) { ... } с соответствующим valid && ... во внутреннем l oop тоже, но мы не собираемся. Этот код «что-то делает» (а именно, «проверяет достоверность элемента» для любого массива-массивов), и код, который «что-то делает», должен быть в своем собственном методе с именем метода, описывающим, что он делает. И это значительно упрощает «не выполнять ту работу, которая нам не нужна»: мы просто выходим из функции, когда знаем, что проделали достаточно работы, чтобы получить ответ.

Итак, давайте сделай это:

// 1st fix: this code "does soemthing". Do that as a method.
public boolean testForValidContent(int[][] arr) {
  // We don't need a variable to track things: because we're
  // returning a value, we can simply return the right value
  // at the moment we return.

  for(int i = 0; i < arr.length; i++) {
    for(int j = 0; j < arr[i].length; j++) { // 2nd fix: check the right array's length
      if(arri][j] <= 1 || arr[i][j] >= 100) { // 3th fix: OR, not AND

        // At this point we know the array is not valid, so there
        // is no point in running even a single thing more:
        return false;

      }
    }
  }

  // We checked the entire array, and everything's valid:
  return true;
}
1 голос
/ 29 мая 2020

Обновите условие for l oop до i < inArray.length && test и j < inArray[0].length && test, что приведет к завершению l oop после обнаружения недопустимого номера и вашего условия if до inArray[i][j] <= 1 || inArray[i][j] >= 100

boolean test = true

        for(int i = 0; i < inArray.length && test; i++){
            for(int j = 0; j < inArray[0].length && test; j++){ 
                if(inArray[i][j] <= 1 ||  inArray[i][j] >= 100){    
                    test = false;
                }
            }
        }

        return test;

вы также можете пропустить if блок,

boolean test = true

        for(int i = 0; i < inArray.length && test; i++){
            for(int j = 0; j < inArray[0].length && test; j++){ 
                test = (1 < inArray[i][j]  && inArray[i][j] < 100)  
            }
        }

        return test;
...