Разделение входных данных сканера из файла - PullRequest
0 голосов
/ 24 марта 2012

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

package usegradebook;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class GradeBook {

private static Object[][] studentRecords = new Object[8][8];

public void compileRecord() throws FileNotFoundException
{      

   File file = new File("SomeData.txt");                   
   Scanner input = new Scanner(file);
   input.useDelimiter(",");

   for(int row = 0; row < studentRecords.length; row++)
   {
       for(int column = 0; column < studentRecords[row].length; column++)
       {
           studentRecords[row][column] = input.next();                    
       } 

   }                
   input.close();
}

Вот данные: LastName, FirstName, Exam1, Asg1, Asg2, Exam2, Asg3, Asg4 Карр, Арлен, 91, 86, 94, 100, 98, 93Stotz, Ralph, 81,83,, 93, 78 Yi, Yu, 99, 88, 101, 76, 90, 94 Rao, Sista, 91, 86, 94, 100, 98, 93 Christopher, Thomas, 78, 79,82, 88, 78, 91 McClurg, Andrew, 91, 87, 99, 87,, 93 Noble, Rich, 84, 79, 85, 88, 90, 91 Johnson, Mark, 100, 100, 100, 100, 100,100

Возвращает "Исключение в потоке" main "java.util.NoSuchElementException"

Ответы [ 2 ]

0 голосов
/ 24 марта 2012

Проблема с вводом.Для одной записи не хватает 1 данных.Поэтому, когда дело доходит до последних данных последней записи, вы в конечном итоге вызовете input.next(), когда данных нет.Также убедитесь, что вы проверили с hasNext() перед вызовом next() на объекте сканера, что предотвратит вас от этого исключения.

0 голосов
/ 24 марта 2012

Вместо того, чтобы полагаться на вход, имеющий ровно 8 записей в строке (в настоящее время вы просто вызываете input.next (), не проверяя, есть ли на самом деле другой токен), вы должны использовать input.hasNext (), чтобы увидеть, есть ли у него другой токен. Это позволит вам видеть более изящно, когда вы получите строку, которая не соответствует ожидаемой, и поможет отладить это.

См. http://docs.oracle.com/javase/tutorial/essential/io/scanning.html

Трудно увидеть из вашего вопроса точный формат вашего входного файла, но я подозреваю, что там что-то не так. Возможно, распечатайте каждую строку, когда она обрабатывается, или поймайте исключение, когда она выдается, и затем напечатайте строку. Это сузит, какой бит входного файла, не соответствует вашим ожиданиям.

...