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