2011-09-26 4 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) 

> 

誰かが私はこれを修正して、なぜ私に説明を助けることはできますか?

またDATA.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の前に、配列ストアがインクリメントされているためです。だから、4行目に来たときには、あなたが見た例外をスローするfill[4]を使用しようとしています。

あなたのコードが何行あるか分からないとすれば、配列の代わりにList<Integer>を使用することをお勧めします。

ます。また、各ラインから6つのint型の値を読み取るないだ - あなたは、各ラインを読み、その後、これらの行のそれぞれから最初intを解析しています。

+0

これはたくさんの助けをしてくれてありがとう – M1N33

0

私はあなたの問題を分析しました。 ループ内で何をしようとしていますか?fileScan.next()は、ライン(スキャナ参照)に保存します。Data.txtには4行あります。したがって、fileScan.nextは4回しか使用できません。各ループの終わりにfilescan.nextInt()を出力しますが、4番目のループの最後に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

関連する問題