Заполнить 2D-массив из текстового файла в Java (сгенерированный NoSuchElementExcecption) - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь заполнить двумерный массив из текстового файла (который является просто пи с точностью до 900-го знака после запятой, без пробелов или чего-либо еще, кроме 3.14 ...). Сейчас он напечатает, какой индекс строки и столбца я нахожу,вместе со счетчиком (который будет удален в конце концов).

import java.util.Scanner;

public class Array {

public static void main(String[] args) throws Exception {
    // instantiate input file
    java.io.File file = new java.io.File("C:\\arrayinput.txt");

    // instantiate scanner to read file
    Scanner scanner = new Scanner(file);

    // instantiate array
    String[][] array = new String[20][45];

    // instantiate counter
    int i = 1;

    // loop to read file and assign a character to each array element
    for (int rows = 0; rows < array.length; rows++) {
        for (int columns = 0; columns < array[rows].length; columns++) {
            System.out.println("Row: " + rows + ", column: " + columns + ", counter = " + i);
            i++;
            array[rows][columns] = scanner.next();

        } // end inner for loop

    } // end outer for loop
    scanner.close();
}// end main method

}

Этот код будет повторяться дважды и отображать:

Строка: 0, столбец: 0, счетчик = 1

Строка: 0, столбец: 1, counter = 2

Исключение в потоке "main" java.util.NoSuchElementException

 at java.util.Scanner.throwFor(Unknown Source)

 at java.util.Scanner.next(Unknown Source)

 at Array.main(Array.java:30)

Я не понимаю, почему я получаю это исключение при запуске кодабез

array[rows][columns] = scanner.next();

Он будет циклически проходить по строкам 0-19 и столбцам 0-39, как я и ожидаю, и счетчик будет повторяться вплоть до 900 (так как текстовый файл - это пи на 900-е место),Но когда он начинает назначать каждый символ из текстового файла каждому элементу, я получаю сообщение об ошибке, когда попадаю в строку 0, столбец 2, и я понятия не имею, почему.Содержимое моего файла arrayinput.txt:

3.

1 Ответ

0 голосов
/ 28 ноября 2018

Всегда проверяйте, если ваш сканер hasNext() токен, а затем рассмотрите возможность вызова next().Попробуйте это:

Я исправил некоторые ошибки, мой компилятор жаловался на исключение, которое вас не перехватило.Наконец закройте сканер в блоке finally (или в ваших попытках с ресурсами).

public static void main(String[] args) {
    // instantiate input file
    File file = new java.io.File("file.txt");
    Scanner scanner = null;
    // instantiate scanner to read file
    try {
      scanner = new Scanner(file);

      // instantiate array
      String[][] array = new String[20][45];

      // instantiate counter
      int counter = 1;

      // loop to read file and assign a character to each array element
      for (int i = 0; i < array.length; i++) {
          for (int j = 0; j < array[i].length; j++) {
              System.out.println("Row: " + i + ", column: " + j + ", counter = " + counter++);
              if (scanner.hasNext()) {
                array[i][j] = scanner.next();  
              }
          } // end inner for loop

      } // end outer for loop
    } catch(FileNotFoundException e) {
        System.err.println("There is no such file");
    }finally{
        scanner.close();
    }
  }

Редактировать

Вывод:

Row: 0, column: 0, counter = 1
Row: 0, column: 1, counter = 2
Row: 0, column: 2, counter = 3
Row: 0, column: 3, counter = 4
Row: 0, column: 4, counter = 5
Row: 0, column: 5, counter = 6
Row: 0, column: 6, counter = 7
Row: 0, column: 7, counter = 8
Row: 0, column: 8, counter = 9
Row: 0, column: 9, counter = 10
Row: 0, column: 10, counter = 11
Row: 0, column: 11, counter = 12
...
...