2016-03-02 3 views
-1

я должен прочитать данные из файла, как это:чтение из файла в 2D массив

4 
192 48 206 37 56 
123 35 321 21 41 
251 42 442 32 33 

первое число является общее число кандидатов (столбцы) и мне нужно, чтобы сохранить это значение для другого использования. Затем мне нужно прочитать остальную часть данных в 2D-массиве. Я обновил свой код тем, что у меня есть сейчас, но он все еще не работает. Я постоянно получаю ошибку java.util.NoSuchElementException: Нет линии не найдено

public static int readData(int[][] table, Scanner in)throws IOException 
{ 
System.out.println("Please enter the file name: "); 
String location = in.next(); 
Scanner fin = new Scanner(new FileReader(location)); 
int candidates = fin.nextInt(); 
fin.nextLine(); 
for (int row = 0; row < 5; row++) { 
    for (int column = 0; column < candidates; column++) { 
    String line = fin.nextLine(); 
    fin.nextLine(); 
    String[] tokens = line.split(" "); 
    String token = tokens[column]; 
    table[row][column] = Integer.parseInt(token); 
    } 
} 
fin.close(); 
return candidates; 
} 

} 
+0

Определить «полностью не работает». Что происходит? Выходит ли вафли из экрана? Прежде всего, вы игнорируете «кандидатов». Во-вторых, вы просто читаете первую строку: 'fin.nextLine();' должно быть на каждой итерации. – Tunaki

+0

получение ошибки java.lang.NumberFormatException: для строки ввода: "" после ввода имени файла – Zackary

+0

, как я игнорирую кандидатов? Я не понимаю. – Zackary

ответ

0

Насколько я понимаю, ваша главная задача состоит в том, чтобы извлечь целое число значения из файла и поместить его в 2D массив.

Я бы порекомендовал вам отсылая к сканеру API Reference на веб-сайте Oracle: https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html

Вы можете найти там, что есть некоторые более подходящие методы для вашей задачи:

  1. nextInt() - используется для получать целочисленное значение непосредственно из файла
  2. hasNextLine() - используется для определения наличия следующей строки ввода

Предполагая, что candidates является число столбцов, следует рассматривать как целое число, а не строка:

int candidates = fin.nextInt(); 

С использованием указанных методов сканера, получение String значения из файла не будет необходимости больше , поэтому переменные line и numbers могут быть полностью удалены из исходного кода.

С использованием метода hasNextLine(), вы можете быть уверены, что файл будет прочитан до его конца:

int row = 0; 
while(fin.hasNextLine()) {       //while file has more lines 
    for(int col = 0; col < candidates; j++) {  //for 'candidates' number of columns 
     table[row][col] = fin.nextInt();   //read next integer value and put into table 
    } 
    row++;           //increment row number 
} 

Пожалуйста, помните, что Java массивы не динамически масштабируемой.

Ваш 2D-массив - table должен быть инициализирован с точным размером данных, который должен быть помещен внутрь.

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

+0

помог мне, тон, чувак, отлично работает теперь за помощь – Zackary

+0

С радостью услышать :) Cheers! – Fester

Смежные вопросы