将int读入多维数组

时间:2012-03-10 23:16:12

标签: java

我的问题发生在for循环中,从文件读入我的score数组中的值。程序读入并打印前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);
    }

}

3 个答案:

答案 0 :(得分:1)

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

为什么-1?这就是你的AIOOB来自的地方。

答案 1 :(得分: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]);
    }
}

答案 2 :(得分:0)

实际上,有三个问题。

  1. 只有3名球员,而不是18名
  2. 您需要18x3阵列,而不是17x2阵列
  3. [i][j]代替[j][i]
  4. 您的代码与我的修改版本的差异(其效果类似于魅力):

    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]);