#java #arrays #2d
#Ява #массивы #2d
Вопрос:
Я работаю над проблемой, в которой мне нужно проверить, все ли 9 цифр находятся в матрице 3×3.
Я знаю, что мне следует перебрать матрицу 3×3 и проверить, является ли каждое число цифрой или нет. Вот мой код, но у меня нет указаний, как это сделать.
public boolean find(int num) { int []a = {1, 2, 3, 4, 5, 6, 7, 8, 9}; for (int i = 0; i lt; a.length; i ) if (a[i] == num) return true; return false; } public boolean allDigit() { boolean isDigit = true; for (int i = 0; ilt; _3x3.length; i ) { for(int j = 0; j lt; _3x3[i].length; j ) { if (!find(_3x3[i][j])) isDigit = false; } } }
Комментарии:
1. Каков тип этого
_3x3
массива? Если это уже int , то значения могут быть только числами. Вы имеете в виду однозначную цифру , как в0lt;= n lt;= 9
?2. Как число может быть логическим? Я предполагаю, что числа в матрице будут
int
/byte
/long
т. Е. числом? Ваш код не будет компилироваться сам по себе.
Ответ №1:
Представленный код содержит несколько опечаток:
- тип
num
параметра вfind
должен бытьint
- метод
allDigit
должен вернутьсяisDigit
в конце - входную матрицу
_3x3
необходимо где — то определить и заполнить или передать вallDigit
качестве аргумента.
После устранения указанных проблем код должен определить , принадлежат ли все числа в _3x3
массиве к закрытому диапазону [1, 9]
, то есть, если входная матрица содержит 1
во всех своих ячейках, код возвращается true
.
Однако, если цель задачи состоит в том, чтобы проверить, что входная матрица содержит все цифры, то есть нет повторяющейся записи, то отдельный find
метод вызывать не следует. Вместо этого необходим логический массив для проверки наличия повторяющихся записей:
public boolean allDigitsPresent(int[][] arr) { boolean[] digitSet = new boolean[10]; for (int i = 0; i lt; arr.length; i ) { for (int j = 0; j lt; arr[i].length; j ) { int d = arr[i][j]; // digit if (d lt;= 0 || d gt;= digitSet.length) { return false; // invalid value in the matrix } if (digitSet[d]) { // already set, duplicate is found return false; } digitSet[d] = true; } } return true; // no duplicate digit is found, all digits are in range [1..9] }
Комментарии:
1. ПРИВЕТ, Алекс,Спасибо за твой ответ ,когда я проверяю твой код, он не возвращает false, если есть дубликаты.