2011-09-26 3 views
1

각 반복마다 6 개의 int 값을 읽고 int 로컬 변수에 저장하려면 while 루프를 얻어야합니다. 나는 오류를 던지는 아래의 코드와 같은 것을 시도했다. 배열 크기를 변경하려고 시도했지만 여전히 작동하지 않습니다.while 루프 문제 및 데이터 저장

String fileName = "Data.txt"; 
int [] fill = new int [6]; 
try{ 
    Scanner fileScan = new Scanner(new File(fileName)); 
    int i = 0; 
    while (fileScan.hasNextInt()){  
    Scanner line = new Scanner(fileScan.nextLine()); 
    i++; 
    line.next(); 
    fill[i] = line.nextInt(); 
    System.out.println(fileScan.nextInt()); 
    } 
}catch (FileNotFoundException e){ 
    System.out.println("File not found. Check file name and location."); 
    System.exit(1); 
    } 
} 

> run FileApp 
0 
0 
1 
java.lang.ArrayIndexOutOfBoundsException: 4 
    at FilePanel.<init>(FilePanel.java:35) 
    at FileApp.main(FileApp.java:14) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:271) 

> 

누군가가 나에게이 문제를 해결하고 저 이유를 설명 할 수있는 오류?

또한 데이터 .txt 당신은 크기 4의 배열을 만드는, 입력 라인이 있기 때문에 당신이 거기 많은 값에 값을 저장하고

1 1 20 30 40 40 
0 2 80 80 50 50 
0 3 150 200 10 80 
1 1 100 100 10 10 

답변

2

이 포함되어 있습니다. 배열 번호가 인 경우를 제외하고 배열 인덱스가 1 인을 시작하는 경우를 제외하고 i앞에 배열 저장소 인이 증가합니다. 따라서 네 번째 줄에 올 때 fill[4]을 사용하면 예외를 throw합니다.

코드가 몇 줄이 될지 모르는 것을 감안할 때 배열 대신 List<Integer>을 사용하는 것이 좋습니다.

또한 각 라인에서 6 개 INT 값을 읽는 하지있어 - 당신은 각 라인을 읽고 다음 그 라인의 각에서 int를 분석하고 있습니다.

+0

많은 도움을 주신 덕분에 – M1N33

0

나는 당신의 문제를 분석했다. 루프 중에 fileScan.next()를 사용하려고하면 라인에 저장됩니다 (스캐너 참조). Data.txt에는 4 줄이 있습니다. 따라서 fileScan.next는 4 번만 가능합니다. 각 루프의 끝에서 filescan.nextInt()를 인쇄하지만 네 번째 루프가 끝날 때 nextInt를 인쇄 할 다음 줄이 없으므로 오류가 발생합니다. 그리고 while 루프의 끝에서 i를 증가시켜야합니다. 그렇지 않으면 fill [1]에서 시작합니다.

0

다음 코드를 사용할 수 있습니다. 도움이 될지도 모릅니다.

String fileName = "Data.txt"; 
     int[] fill = new int[12]; 
     try 
      { 
       Scanner fileScan = new Scanner(new File(fileName)); 
       int i = 0; 
       while(fileScan.hasNextInt()) 
        { 
         Scanner line = new Scanner(fileScan.nextLine()); 
         // System.out.println(fileScan); 
         // System.out.println(line); 

         line.next(); 
         fill[i] = line.nextInt(); 
         System.out.println("fill" + fill[i]); 
         // System.out.println(fileScan.nextInt()); 

         i++; 
        } 
      } 
     catch (FileNotFoundException e) 
      { 
       System.out.println("File not found. Check file name and location."); 
       System.exit(1); 
      } 
+0

시도해 보았습니다. 고마워. – M1N33