Java Чтение 2D-массива из файла - PullRequest
1 голос
/ 17 октября 2011

Скажите, у меня есть файл следующего формата:

3
4
1,2,3,4
5,6,7,8
9,10,11,12

Первые две строки файла представляют количество строк и столбцов двумерного массива. После этого каждая строка представляет значения каждой строки двумерного массива. Я пытаюсь прочитать этот файл и создать двумерный целочисленный массив в Java. Я попробовал следующий код:

public class PrintSpiral {
    private static BufferedReader in = null;
    private static int rows = 0;
    private static int columns = 0;
    private static int [][] matrix = null;
    public static void main(String []args) throws Exception {
        try {
            String filepath = args[0];
            int lineNum = 0;

            int row=0;
            in = new BufferedReader(new FileReader(filepath));
            String line = in.readLine();
            while(line!=null) {
                lineNum++;
                if(lineNum==1) {
                    rows = Integer.parseInt(line);
                    System.out.println("The number of rows of the matrix are: " + rows);
                } else if(lineNum==2) {
                    columns = Integer.parseInt(line);
                    System.out.println("The number of columns of the matrix are: " + columns);
                    matrix = new int[rows][columns];
                } else {
                    String [] tokens = line.split(",");
                    for (int j=0; j<tokens.length; j++) {
                        System.out.println("I am filling the row: " + row);
                        matrix[row][j] = Integer.parseInt(tokens[j]);
                    }
                    row++;
                }
            }
        } catch (Exception ex) {
            System.out.println("The code throws an exception");
            System.out.println(ex.getMessage());
        } finally {
            if (in!=null) in.close();
        }
        System.out.println("I am printing the matrix: ");
        for (int i=0; i < rows; i++) {
            for(int j=0; j < columns; j++)
                System.out.print(matrix[i][j]);
            System.out.println("");
        }
    }
}

Вывод, который я вижу:

The number of rows of the matrix are: 3
The number of columns of the matrix are: 3
I am filling the row: 0
I am filling the row: 1
I am filling the row: 2
I am filling the row: 3
The code throws an exception
3
I am printing the matrix: 
300
300
300
3 0 0 0 0 0 3 3 0

Очевидно, что Java-код неправильно читает файл. Кроме того, мой код вызывает исключение. Я не уверен, что вызывает это исключение. Я не могу понять, что не так с моим кодом. Спасибо!

Ответы [ 3 ]

4 голосов
/ 17 октября 2011

изменить

in = new BufferedReader(new FileReader(filepath));
String line = in.readLine();
while(line!=null) { .....

на

in = new BufferedReader(new FileReader(filepath));
String line = null;
while((line = in.readLine()) !=null) { .....

, чтобы прочитать новую строку в начале каждого цикла

1 голос
/ 17 октября 2011

в конце цикла while, добавьте in.readline();

Вы просто держите одну и ту же строку навсегда и зацикливаетесь на ней.

1 голос
/ 17 октября 2011

У вас (очень очевидно) нет readLine () внутри вашего цикла, поэтому он всегда читает только первую строку файла.

Зачем надо указывать строки / столбцы? Почему бы просто не понять это по самим данным?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...