不确定为什么数组越界JAVA

时间:2014-09-23 16:25:42

标签: java arrays indexoutofboundsexception

我在运行时在String weapon = dataz[1];行上获得了Array Index Out of Bounds异常。我不确定是什么导致了这一点,因为这与我以前的作业中使用的代码几乎相同。任何关于为什么会发生这种情况的逻辑将不胜感激!

public Hero[] getHeroes(){

    String file = getFilePath();
    Hero[] heroPower = new Hero[5];

    int i=0;
    try{
    Scanner data = new Scanner(file);
    while(data.hasNextLine() && i < 5)
    {
        String next = data.nextLine();
            if(!next.trim().isEmpty())
            {
                String[] derp = next.split(",");
                String name = derp[0];
                String weapon = derp[1];
                int attackPoints = Integer.parseInt(derp[2]);
                heroPower[i] = new Hero(name,weapon,attackPoints);
                i++;
            }
        }
     data.close();
    } finally {

    }   
    return heroPower;
  }
}

4 个答案:

答案 0 :(得分:1)

您的next字符串可能不会拆分。它没有,,您也没有检查该选项。

答案 1 :(得分:1)

您的代码正确处理空行,但是当输入没有至少三个标记时它会失败:它假定derp[0]derp[1]derp[2]有效,但是有效性取决于输入。

您可以通过查看从next.split返回的令牌数来解决此问题:

String next = data.nextLine();
String[] derp = next.split(",");
if(derp.length >= 3) {
    ...
}

此条件还涵盖修剪后的next为空的情况,因此不需要单独检查。

答案 2 :(得分:1)

您确实需要确保输入的输入数量是您期望的输入数量,一个简单的检查是检查derp数组中从split获得的参数数量。

public Hero[] getHeroes(){

    String file = getFilePath();
    Hero[] heroPower = new Hero[5];

    int i=0;
    try{
    Scanner data = new Scanner(file);
    while(data.hasNextLine() && i < 5)
    {
        String next = data.nextLine();
            if(!next.trim().isEmpty())
            {
                String[] derp = next.split(",");
                //This is the line to change
                if(derp > 3){
                    String name = derp[0];
                    String weapon = derp[1];
                    int attackPoints = Integer.parseInt(derp[2]);
                    heroPower[i] = new Hero(name,weapon,attackPoints);
                    i++;
                 }else{

                     //throw an error

                 }
            }
        }
    data.close();
    } finally{

    }   
    return heroPower;
}
}

答案 3 :(得分:0)

问题很可能是您的输入,它不包含任何,符号:

String[] derp = next.split(","); // split by commas a word that has no commas so derp.length == 1
String name = derp[0];           // this is ok since length is 1
String weapon = derp[1];         // this is error

在使用之前,您应该检查derp.length

String[] derp = next.split(",");
if(!derp.length == 3) { // because name=derp[0], weapon=derp[1], attackPoints = derp[2]
    // ... create name, weapon, points and assign to heroPower
} else {
    System.out.println("Invalid input");
}