2012-03-10 19 views
0

私の問題は、forループでファイルから値を読み込んでスコアリストに格納するときに発生します。プログラムは読み込み、最初の6個の値または2行のintを出力しますが、ArrayIndexOutOfBoundsExceptionが返されます。2intを多次元配列に読み込む

なぜこれが停止しているのかわかりません。もし私が< 1000を持っていれば、それは17の値を読みます。とにかく、私が読んでいるファイルは以下の通りです(テキストファイルの書式がわからない)。

すべてのヘルプはなぜ-1

Andy Matt Tom 

3 2  3 

4 4 5 

3 3 2 

2 2 2 

2 4 2 

2 3 2 

4 4 5 

2 3 3 

4 3 5 

3 3 6 

2 2 5 

3 3 3 

3 3 2 

3 2 4 

3 2 6 

3 4 3 

2 3 2 

2 2 2 

50 52 62 


public static void main(String args[]) 
{ 
    try 
    { 

    if (args.length<1) 
    { 
     System.out.printf("\n...You must enter the name of a file\n"); 
     System.exit(0); 
    } 

    Scanner infile = new Scanner (new File(args[0])); 


    int par= 3; 
    int play= 18; 
    String[] players= new String[play]; 
    int k=0; 
    int scores[][]= new int[play-1][par-1]; 

    while(infile.hasNext()) 
    { 
    players[k]=infile.next(); 

    k++; 

    if (k==play) 
    break; 
    } 


    for(int j=0; j<par; j++) 
    { 
     for (int i=0; i<play; i++) 
     { 
     scores[j][i]=infile.nextInt(); 
     System.out.println(scores[j][i]); 
     } 

    } 

    } 
    catch (FileNotFoundException e) 
    { 
    System.out.println("Bug"); 
    System.exit(0); 
    } 

} 

答えて

0

は実際に、3つの問題があります。

  1. のみ3選手ではなく、18
  2. があります。あなたは私の修正版に対して18x3配列ではなく、17x2配列
  3. [i][j]代わりの[j][i]

あなたのコードの差分を必要とする(これは魅力のように働く):

22c22 
<  String[] players= new String[play]; 
--- 
>  String[] players= new String[par]; 
24c24 
<  int scores[][]= new int[play-1][par-1]; 
--- 
>  int scores[][]= new int[play][par]; 
32c32 
<  if (k==play) 
--- 
>  if (k==par) 
41,42c41,42 
<   scores[j][i]=infile.nextInt(); 
<   System.out.println(scores[j][i]); 
--- 
>   scores[i][j]=infile.nextInt(); 
>   System.out.println(scores[i][j]); 
+0

私は-1で何を考えていたのですか – mju516

1
int scores[][] = new int [play-1][par-1]; 

をいただければ幸いですか!それがあなたのAIOOBの出所です。

1

二つの問題があります。

int scores[][] = new int[play-1][par-1]; // Why -1 ? 

と:

for(int j=0; j<par; j++)    // should be 'j < play' as 'j' 
             // is index to dimension 
             // with size 'play' 
{ 
    for (int i=0; i<play; i++)  // should be 'i < par' as 'i' is 
             // index to dimension with 
             // size 'par' 
    { 
     scores[j][i]=infile.nextInt(); 
     System.out.println(scores[j][i]); 
    } 
} 
関連する問題