Проверьте, все ли 9 цифр находятся в 2d-массиве 3*3 в java

#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, если есть дубликаты.