проверьте, все ли числа от 1 до 9 находятся в массиве 3×3

#arrays #multidimensional-array #arr

#массивы #многомерный массив #арр

Вопрос:

метод проверяет, находятся ли все числа от 1 до 9 в заданном массиве 3×3. я продолжаю получать истину, даже если массив содержит не все числа и имеет одно из чисел дважды. в чем моя ошибка?

 public boolean allThere(){  int counter=0;  boolean t;  for(int k=1; klt;10;k  ) {  t=true;   for (int i = 0; i lt; 3; i  ) {  for (int j = 0; j lt; 3; j  ) {  if(arr[i][j]==k){  counter  ;  t=false;   }  if(t=false) break;  }  if(t=false) break;  }    }  if(counter==9) return true;  else return false; }  

Ответ №1:

Проблема связана с вашими заявлениями if :

 If (t=false) break;  

Проблема в том, что у вас есть только один=, что делает это предложение присваиванием, значением которого является присваиваемое значение (в данном случае false). Это приводит к тому, что разрывы никогда не выполняются, поэтому циклы всегда завершаются — и в результате подсчеты ВСЕГДА будут находить 9 чисел

Простое решение состоит в том, чтобы либо использовать==, либо лучше использовать ! оператор (о, и измените имя на что-то сразу понятное ), например :

 if (!missing) break;  

Ответ №2:

Проблема в том, что оператор = присваивает значение переменной t , в то == время как оператор равенства проверяет значение переменной. Измените его на

 if (t == false) break;  

Вы также можете использовать ! оператор не

 if (!t) break;  

Вы также можете увидеть этот алгоритм, реализованный на java

 public boolean allThere(int[][] arr) {   int[] numbers = new int[]{1, 1, 1, 1, 1, 1, 1, 1, 1};   for (int i = 0; i lt; 3; i  ) {  for (int j = 0; j lt; 3; j  ) {  int value = arr[i][j];  numbers[value-1]--;  }  }   for (int bool: numbers) {  if (bool != 0) {  return false;  }  }   return true;   }