它似乎指向loadDogs();和 items[1],但我没有看到任何问题。它之前使用相同的代码工作,然后我开始出现这些错误。我之前备份过这段代码,但是当我使用备份的时候;结果还是有的。我尝试修复了一个小时,但它并没有消失。虽然运行它会在 eclipse 中抛出错误,但它可以编译。
public class DogCompetitionManager {
private final String DOGS_FILE = "res/dogs.txt";
private final String COURSE_FILE = "res/courses.txt";
private ArrayList<Dogs> dogsList;
private ArrayList<Courses> courseList;
public DogCompetitionManager()
{
loadDogs();
loadCourses();
runAdministration();
}
private void loadDogs()
{ // creates a dogsList array
dogsList = new ArrayList<Dogs>();
BufferedReader inFile = null;
try
{
inFile = new BufferedReader(new FileReader(DOGS_FILE));
String line = inFile.readLine();
while(line != null)
{
String[] items;
items = line.split(" ");
dogsList.add(new Dogs(items[0],
items[1],
Double.parseDouble(items[2]),
Integer.parseInt(items[3]),
items[4]));
line = inFile.readLine();
}
inFile.close();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
最佳答案
永远不要相信用户输入!
String[] items;
items = line.split(" ");
dogsList.add(new Dogs(items[0],
items[1],
Double.parseDouble(items[2]),
Integer.parseInt(items[3]),
items[4]));
在这里,您分割了一个输入行并期望它具有特定的格式。那是相当不稳定的。您应该首先确保该行实际上具有该格式,如果没有,则进行相应的处理。
至少您应该对错误进行一些输出。然后,您可以忽略该行并处理文件的其余部分,也可以抛出异常,中止该过程。取决于您的要求。
一个简单的检查是查看String[]
在分割后是否有与您期望的一样多的项目(或者可能为空)。
示例:
if( null == items || items.length < 5 ) {
// 1. LOG ERROR
// To ignore line and move on:
line = inFile.readLine();
continue;
}
更复杂的方法是使用某种正则表达式来查看是否有数字、您期望它们的位置等。我还建议在将字符串转换为数值时捕获解析错误。
关于java - 线程 "main"java.lang.ArrayIndexOutOfBoundsException : 1. 中的异常 在此之前它正在工作,然后我得到了这个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41931591/