有关ArrayIndexOutOfBoundsException的问题?

时间:2016-04-20 05:12:16

标签: java arrays indexoutofboundsexception throws

所以我有这个代码......这就是它的一部分。

File File = new File("data2.txt");
    Scanner readUpdate = new Scanner(File);
    Player[] updatePlayers = new Player[200];
    String updateSTR;
    int updateTotalCounter = 0;
    while (readUpdate.hasNext()) {

        updateSTR = readUpdate.nextLine();
        String [] updateData = updateSTR.split(",");
        updatePlayers[updateTotalCounter] = new Player(updateData[0], updateData[1],updateData[2], 
                Integer.parseInt(updateData[3]), Integer.parseInt(updateData[4]));

        updateTotalCounter++;

    }

    readUpdate.close();

Java不断出现并告诉我

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
    at Main.main(Main.java:43)

我不明白这意味着什么。任何线索?

2 个答案:

答案 0 :(得分:2)

这意味着您尝试访问数组中大于数组中元素数量的位置,因此您会获得该常见异常。

您假设数组updateData对于您读取的每一行都有5个位置,并且对于至少一个行似乎是假的,因此抛出异常。

确保

String [] updateData = updateSTR.split(",");

所有行的大小为5(从0到4)。以这种方式解决问题,但请注意,某些行不会被处理:

File File = new File("data2.txt");
    Scanner readUpdate = new Scanner(File);
    Player[] updatePlayers = new Player[200];
    String updateSTR;
    int updateTotalCounter = 0;
    while (readUpdate.hasNext()) {

        updateSTR = readUpdate.nextLine();
        String [] updateData = updateSTR.split(",");
        if (updateData.lenght < 5) {
            // invalid line format... print any message...
        } else {
            updatePlayers[updateTotalCounter] = new Player(updateData[0], updateData[1],updateData[2], 
                Integer.parseInt(updateData[3]), Integer.parseInt(updateData[4]));

            updateTotalCounter++;
        }

    }

    readUpdate.close();

答案 1 :(得分:0)

最好检查数组的长度,

String [] updateData = updateSTR.split(",");
if(updateData.length > 4){
        updatePlayers[updateTotalCounter] = new Player(updateData[0], updateData[1],updateData[2], 
                Integer.parseInt(updateData[3]), Integer.parseInt(updateData[4]));
}