我在运行时在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;
}
}
答案 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");
}