Заполнение матрицы содержимым из файла - PullRequest
0 голосов
/ 03 октября 2019

Я получаю ошибку в своем коде. Цель состоит в том, чтобы добавить содержимое файла в матрицу. Затем, в конце концов, мне нужно разобрать его, чтобы добавить его в график, чтобы я мог в итоге выполнить поиск в глубину. Но до тех пор мне нужно выяснить эту ошибку. Я не могу понять, что именно вызывает ошибку. так что любая помощь будет хорошей. Вот ошибка, которую я получаю:

Exception in thread "AWT-EventQueue-0" java.util.NoSuchElementException
        at java.base/java.util.Scanner.throwFor(Scanner.java:937)
        at java.base/java.util.Scanner.next(Scanner.java:1478)
        at DelivA.<init>(DelivA.java:53)
        at Prog340.actionPerformed(Prog340.java:120

Вот класс, который я написал.

public DelivA(File in, Graph gr) {
        inputFile = in;
        g = gr;
        // Get output file name.
        String inputFileName = inputFile.toString();
        String baseFileName = inputFileName.substring(0, inputFileName.length() - 4); // Strip off ".txt"
        String outputFileName = baseFileName.concat("_out.txt");
        outputFile = new File(outputFileName);
        if (outputFile.exists()) { // For retests
            outputFile.delete();
        }
        try {
            output = new PrintWriter(outputFile);
        } catch (Exception x) {
            System.err.format("Exception: %s%n", x);
            System.exit(0);
        }
        // --------------------------------Deliverable
        // A-------------------------------------------//

        FileReader f1 = null;

        int c = 0;
        int r = 0;
        try {
            f1 = new FileReader(inputFileName);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Scanner scanner = new Scanner(f1);
        while (scanner.hasNextLine()) {
            String line = scanner.nextLine();
            String splitLine[] = line.split(" ");
            c = splitLine.length;
            r++;
        }
        String[][] matrix = new String[c][r];
        @SuppressWarnings("resource")
        Scanner s1 = new Scanner(f1);
        for (int row = 0; row < matrix.length; row++) {
            String words = s1.next(); // will scan each row of the file
            for (int col = 0; col < matrix[row].length; col++) {
                char ch = words.charAt(col); // will put each character into array
                matrix[row][col] = String.valueOf(ch);
            }
        }
    }

}

1 Ответ

0 голосов
/ 03 октября 2019

Ваша проблема, вероятно, здесь:

String words = s1.next():

Вы не проверяете, доступна ли какая-либо строка.

Вы должны сделать что-то вроде этого:

...
     Scanner s1 = new Scanner(f1);
            for (int row = 0; row < matrix.length; row++) {
                if (scanner.hasNextLine()){
                    String words = s1.next(); // will scan each row of the file
...

Конечно, вы должны переосмыслить логику кода соответственно ...

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