2012-03-10 94 views
0

我的问题发生在for循环中,以便将文件中的值读入我的分数数组中。该程序读入并打印前6个值或2行的整数,但然后我得到ArrayIndexOutOfBoundsException:2将整数读入多维数组

我不知道为什么这是停在那里。如果我有j < 1000,它会读取17个值。无论如何,我正在阅读的文件在下面(不知道文本文件的格式)。

任何帮助,将不胜感激

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

其实,有三个问题。

  1. 只有3名球员,而不是18
  2. 你需要一个18x3阵列,而不是一个17x2阵列
  3. [i][j]而不是[j][i]

DIFF你的代码对我的修改后的版本(这作品像一个魅力):

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 2012-03-11 21:02:30

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

为什么-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]); 
    } 
}