Как прочитать текстовый файл из PrintWriter с BufferedReader для чтения координат сетки со значением? - PullRequest
0 голосов
/ 05 апреля 2019

Я пишу текстовый файл с примерно 3-значными числами (x, y, z), где x - это строка, y - это столбец, а z - это значение для моей сетки судоку.

Мне удалось написать свой текстовый файл, где каждые 3 строки у меня есть номер. Строка 1 = x, строка 2 = y, строка 3 = z, а затем строка 4 = x, строка 5 = y и т. Д. *

У меня проблемы с написанием части кода, где я читаю текстовый файл и затем печатаю свои значения в правильных координатах на консоли.

Я уверен, что в моем коде много ошибок. Это метод, который я сделал для печати на консоли:

static void imprimerGrille()
{            
    try
    {
        BufferedReader lectureTexte = new BufferedReader(new FileReader("partie.txt"));            
        String ligne = lectureTexte.readLine();
        int count = 0;
        while ((ligne = lectureTexte.readLine()) != null){
            for (int i=0; i<grilleSudoku.length; i++){
                System.out.print("\n");
                if (i%3 == 0) 
                    System.out.println();                
                for (int j=0; j<grilleSudoku.length; j++){
                    if (j%3 == 0) 
                        System.out.print(" ");    
                    if (count%3 == 0){
                        //This would be the value I want in line, column coordinate                       
                    }
                    else if (count%3 == 1){
                       //This is my line coordinate
                    }
                    else if (count%3 == 2){                         //colonne
                       //This is my column coordinate 
                    }

                }                
            }
            count++;
            if (count == 3){
                count = 0;
            }
        }
    } catch(Exception ex){
        System.out.println("Fichier inexistant");
    }
}

У меня был этот код здесь, чтобы напечатать макет моей сетки судоку с нулями. У меня просто проблемы с включением его в часть BufferedReader.

   /*for (int i=0; i<grilleSudoku.length; i++){
                System.out.print("\n");
                if (i%3 == 0) System.out.println();
            for (int j=0; j<grilleSudoku.length; j++){
                if (j%3 == 0) System.out.print(" ");                    
                for (int x = 0; x<9; x++){
                    if (grilleSudoku[i][j] == x) System.out.print(x);                        
                }                    
            }                    
        } */ 

1 Ответ

0 голосов
/ 06 апреля 2019

С заданной структурой txt вы можете сделать что-то вроде этого

int[][] sudoku = new int[3][3];
try (BufferedReader br = new BufferedReader(new FileReader("<your-input-file>"))) {
    String line;
    int i = 1;
    int row = 0;
    int column = 0;
    while ((line = br.readLine()) != null) {
        if (i++ % 3 == 0) {
            sudoku[row][column++] = Integer.parseInt(line);
            if (column % 3 == 0) {
                ++row;
                column = 0;
            }
        }
    }
} catch (IOException e) {
    e.printStackTrace();
}
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
        System.out.print(String.format("%d ", sudoku[i][j]));
    } 
    System.out.println();
}

Я рекомендую изменить ваш текст в этом формате (не является действительным судоку):

1,2,3
4,5,6
7,8,9

Преимущество заключается в написании более чистого кода, удобочитаемого ввода, и если вы хотите изменить сетку на 4x4, вам нужно только изменить входной файл и двумерный массив. (Если вы используете ArrayList, то нужно изменить только файл)

int[][] sudoku = new int[3][3];
try (BufferedReader br = new BufferedReader(new FileReader("<your-input-file>"))) {
    String line;
    int row = 0;
    while ((line = br.readLine()) != null) {
        String[] splitted = line.split(",");
        for (int column = 0; column < splitted.length; column++) {
            sudoku[row][column] = Integer.parseInt(splitted[column]);
        }
        row++;
    }
} catch (IOException e) {
    e.printStackTrace();
}
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
        System.out.print(String.format("%d ", sudoku[i][j]));
    }
    System.out.println();
}
...