2014-08-28 2 views
0

파일에서 문자열을 읽고 배열에 저장해야합니다. 그러나, 내 교수는 클래스가 ArrayList를 사용하도록 허용하지 않습니다. 그래서 나는 한 번 hasNextLine()을 사용하여 파일을 실행하기로 결정했다. 그리고 거기에 얼마나 많은 줄이 있는지를 세어 배열을 만들고 줄의 양과 같게하기로 결정했다.Java - 오류 : NoSuchElementException : No Line Found

그런 다음 i이 배열에 <=인지 확인하고 array[i] 값을 fileInput.nextLine();으로 지정하는 while 루프를 만들었습니다. 그러나, 나는 지속적으로 오류 NoSuchElementException: No line found을 얻는 것 같다.

public static void main(String[] args) throws FileNotFoundException { 
    int count = 0; 
    int i = 1; 

    //Read strings from a file and store in array 
    Scanner fileInput = new Scanner(new File("file.dat")); 

    while(fileInput.hasNextLine()) { 
     fileInput.nextLine(); 
     count++; 
    } 
    String [] strArray = new String [count]; 

    while (i <= strArray.length) { 
/*Error Here*/ strArray[i] = fileInput.nextLine(); 
      System.out.println(strArray[i]); 
      i++; 
    } 
} 
} 

사람이 내 오류에 대한 해결책을 알고겠습니까 : 여기

내 코드?

P.S의 FILE.DAT은 다음과 같습니다

FRESH 
MEAT 
EVERY 
SATURDAY 
AT 
TWELVE 
+0

을 제거하려면이 해결하기 위해, 읽을 더 이상 선이있다. 처음부터 새로운'스캐너 '를 만드십시오. –

답변

0

오류 발견. 문제는 새로운 스캐너 클래스를 만들어야한다는 것이 었습니다.

0

조건은 당신이

while (i < strArray.length) 
0

당신이 지적한 바와 같이, 스캐너가 다시 사용할 수 없습니다를 쓸 수 있습니다 여기에

while (i <= strArray.length) 

잘못된 것입니다. 이미 파일의 끝에 도달했기 때문에. 여기

대안 표준 자바 7 NIO를 사용하는 솔루션입니다 : 당신이 자바에서 배열의 인덱스가 zero로 시작다시피

import java.io.IOException; 
import java.nio.charset.StandardCharsets; 
import java.nio.file.*; 
import java.util.Arrays; 

public 
class Reader 
{ 

    public static void main(String[] args) throws IOException 
    { 
     Path path = FileSystems.getDefault().getPath("file.dat"); 
     Object[] myLines = Files.readAllLines(path, StandardCharsets.US_ASCII).toArray(); 
     System.out.println(Arrays.toString(myLines)); 
    } 
} 
0

그래서 마지막 요소의 인덱스는 항상있을 것입니다 lengthOfArray - 1

을 do

while (i <= strArray.length) 

배열에 7 개의 요소가 포함되어있어 첫 번째 요소가 0 인 색인에 추가되고 계속 추가됩니다 요소들. 다음 조건은 내가 7이되지만 여전히 while 루프가 허용하기 때문에 i <= strArray.length을 지정 했으므로 일곱 번째 인덱스에 요소를 추가하려고 시도하지만 배열의 마지막 인덱스는 항상 lengthOfArray - 1이 될 것입니다. 따라서 6이됩니다. 일곱 번째 인덱스를 찾을 수 없으며 예외가 발생합니다.

당신이 모든 라인을 읽은 경우 바로 등호에게

Scanner scannerForReading = new Scanner(new File("file.dat")); 
    while (i < strArray.length && scannerForReading.hasNextLine()) { 
     strArray[i] = scannerForReading.nextLine(); 
     System.out.println(strArray[i]); 
     i++; 
    }