我如何摆脱这个java.lang.ArrayIndexOutOfBoundsException错误?

时间:2013-11-16 13:16:19

标签: java

        String[][] tArray=new String[2][4];

    for (int row=0; row<=2;row++){

        for (int col=0,count=0;col<=4;col++ ,count++){
            Scanner input=new Scanner(System.in);
            System.out.print("Please Enter the name " +count+ ":");
            tArray[row][col]=input.next();
        }

    }

    for (int row=0; row<=2;row++){

        for (int col=0;col<=4;col++){
            System.out.println(tArray[row][col]);
        }

    }

错误: -

线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:4     在array.testArray.main(testArray.java:15)

3 个答案:

答案 0 :(得分:2)

问题是

        for (int col=0,count=0;col<=4;col++ ,count++){

你只能达到3而不是4,因为索引从0开始。使用此

        for (int col=0,count=0;col<4;col++ ,count++){

同样在这里

for (int row=0; row<=2;row++){   // incorrect

这样做

for (int row=0; row<2;row++){

答案 1 :(得分:2)

请记住,Java的索引从零开始,到length - 1结束!你试图找到阵列的三个“行”,其中只有两个:

for (int row=0; row<=2;row++){ //0, 1, 2 - that's three options even though the array's size is only 2

同样有五列只有四列:

for (int col=0,count=0;col<=4;col++ ,count++){ //0, 1, 2, 3, 4 - that makes five

使用<代替<=应该解决这个问题,尽管我还建议使用数组的length属性来找出每次数组的实际大小而不是硬编码。即使您更改了数组的大小,它也会因人为错误而更安全,并且可以正常工作:

for (int row=0; row < tArray.length; row++){

for (int col=0,count=0;col < tArray[row].length; col++ ,count++){

最后,即使这有点偏离主题,colcount似乎总是具有相同的值,所以我建议删除它们。

答案 2 :(得分:0)

原因:您正在迭代循环超过项目长度。

问题在这里:

String[][] tArray=new String[2][4];//means 2 rows and 4 columns

for (int row=0; row<=2;row++)//row 0 to 2 => 0,1,2 iterates 3 times
{

    for (int col=0,count=0;col<=4;col++ ,count++)//column 0 to 4 => 0,1,2,3,4 iterates 5 times
    {
    //code   
    }

}

for (int row=0; row<=2;row++)//row 0 to 2 => 0,1,2 iterates 3 times
{

    for (int col=0;col<=4;col++)//column 0 to 4 => iterates 0,1,2,3,4
    {
   //code
    }

}

<强>解决方案:

 String[][] tArray=new String[2][4];

    for (int row=0; row<2;row++){

        for (int col=0,count=0;col<4;col++ ,count++){
            Scanner input=new Scanner(System.in);
            System.out.print("Please Enter the name " +count+ ":");
            tArray[row][col]=input.next();
        }

    }

    for (int row=0; row<2;row++){

        for (int col=0;col<4;col++){
            System.out.println(tArray[row][col]);
        }

    }