Как читать число за числом из строки чисел во входном файле

#java #arrays #input #integer

#java #массивы #ввод #целое

Вопрос:

В принципе, я должен взять входной файл и заполнить массив размером 9 на 9, но входные данные должны выглядеть так

 530070000
600195000
098000060
800006003
400803001
700020006
060000280
000419005
000080079
  

Числа не разделены, но мне нужно взять каждое и заполнить массив размером 9×9, чтобы создать массив, похожий на головоломку судоку. Я не могу понять, как прочитать входное число по номеру, что означает, что для первой строки я бы получил 5 в качестве первого int, затем следующий int был бы 3, затем 0 и так далее.

 public class SudokuChecker 
{
   public static void main(String[] args) throws Exception 
   {
  
      File file = new File("in.txt");
      Scanner in = new Scanner(file);
     
      int [][] array = new int [9][9];

      while(in.hasNextLine()) 
      {
         for (int i=0; i<array.length; i  ) 
         {
            String[] line = in.nextLine().trim().split(" ");
          
            for (int j=0; j<line.length; j  ) 
            {
               array[i][j] = Integer.parseInt(line[j]);
            }
         }
      }
   }  
}
  

Плата выглядит так

Комментарии:

1. Что вы пробовали на этапе «выяснить»?

2. Я только что попробовал basic, находясь в.hasNextLine, затем в.nextInt, чтобы заполнить массив, но он не разделяет строку чисел, вместо этого просто делает одно из значений 9-значным

3. Один из возможных способов — разделить входные данные на пробелы, тогда вы получите 9 больших значений, поэтому теперь преобразуйте каждое значение в chArarArray().

4. Я не уверен на 100 %, как числа преобразуются в судоку. Не могли бы вы нарисовать судоку, основанное на этих числах, чтобы оно было кристально чистым?

5. Шансы не равны нулю, которые .split(" ") должны быть .split("") . Каждое число находится в отдельной строке, верно?

Ответ №1:

Вот решение, которое будет считывать текущую строку и помещать числа в массив 9×9. Это выполняется только для каждой строки, и массив будет очищен при последующем чтении строки. OP должен будет завершить код для обработки последующих операций чтения строк.

Это использует try-with-resource и BufferedReader для чтения каждой строки вместо сканера. Затем он прочитает строку. Разделите строку на space затем преобразуйте каждый элемент в подстроке в массив символов и выполните итерацию по ним. Затем он преобразует значение в целое число и сохранит его в массив.

 public static void main(String[] args) throws IOException {
  int[][] sudoku = new int[9][9];
  try (BufferedReader reader = Files.newBufferedReader(Paths.get("in.txt"))) {
    String line = null;
    int row = 0;
    while ((line = reader.readLine()) != null) {
      int col = 0;
      for (char c : line.toCharArray()) {
        sudoku[row][col  ] = Integer.valueOf(Character.toString(c));
      }
      row  ;
    }
  }
}