2012-03-24 4 views
0

파일에서 입력을 읽는 프로그램이 있습니다. 쉼표 뒤에 토큰 만 반환하도록 입력을 제한하려고합니다. 그러나 그것은 효과가없는 것처럼 보입니다. 여기 내 코드는 지금까지이다 : 여기 파일에서 스캐너 입력 구분하기

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(); 
} 

데이터이다 성, 이름, Exam1, Asg1, Asg2, Exam2, Asg3, Asg4 카, 알렌, 91, 86, 94, 100, 98, (93) STOTZ 랄프, 81, 83, 93, 78 이순신 유, 99, 88, 101, 76, 90, 94 라오 .... 친구, 91, 86, 94, 100, 98, 93 크리스토퍼 도마 79, 85, 88, 90, 91 존슨, 마크, 100, 100 , 100, 100, 100, 100

"스레드의 예외"main "java.util.NoSuchElementException"을 반환합니다.

답변

0

입력에 문제가 있습니다. 하나의 레코드에 대해 1 개의 데이터가 누락되었습니다. 따라서 마지막 레코드의 마지막 데이터가 오면 데이터가 없을 때 input.next()을 호출하게됩니다. 또한 스캐너 개체에 next()을 호출하기 전에 hasNext()에 확인하십시오. 그러면 예외가 발생하지 않습니다.

+0

대단히 감사합니다. 그 기록은 사실 한 기록을 잃어 버렸습니다. if 문 내에서 input.hasNext()로 코드를 대체하고 문제가 해결되었습니다. – Eric

0

현재 정확히 한 줄에 8 개의 레코드가있는 입력을 사용하는 대신 (실제로 현재 다른 입력이 있는지 확인하지 않고 input.next()를 호출합니다) 토큰) input.hasNext()를 사용하여 다른 토큰이 있는지 확인해야합니다. 이렇게하면 예상 한 것과 일치하지 않는 행을 수신하고이를 디버깅하는 데 도움이 될 때보다 정상적으로 볼 수 있습니다.

그것은 귀하의 질문에서 입력 파일의 정확한 형식을 볼 어렵다 http://docs.oracle.com/javase/tutorial/essential/io/scanning.html

를 참조하지만, 뭔가가 잘못 suspct. 어쩌면 처리 된 각 줄을 인쇄하거나 던져 질 때 예외를 잡아서 줄을 인쇄 할 수 있습니다. 그러면 입력 파일의 어느 비트가 사용자의 예상과 일치하지 않을지를 결정합니다.

+0

귀하의 조언에 감사 드리며 실제로 서식 문제가 있음이 드러났습니다. if 문 내에서 input.next()를 input.hasNext()로 대체하면이 문제가 해결됩니다. – Eric