如何使用BufferedReader从PrintWriter中读取txt文件以读取具有值的网格坐标?

时间:2019-04-05 19:21:25

标签: java bufferedreader sudoku

我正在写一个txt文件,其中包含3位数字(x,y,z),其中x是行,y是列,z是数独网格的值。

我设法写了我的txt文件,其中每3行有一个数字。第1行= x,第2行= y,第3行= z,然后第4行= x,第5行= y,依此类推...

我在编写读取txt文件的代码部分时遇到麻烦,然后在控制台上的正确坐标处打印我的值。

我确定我的代码中有很多错误。这是我在控制台上打印的方法:

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");
    }
}

我在这里使用此代码来打印我的数独网格的布局(其值为0)。我只是在将它与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 :(得分:0)

使用给定的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();
}

我建议将您的txt更改为以下格式(不是有效的数独):

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

编写更清晰的代码,可读的输入很有好处,如果要将网格更改为4x4,则只需更改输入文件和2维数组。 (如果使用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();
}