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