我已经阅读完了教程,所以无论如何,如果你看到我在这里做错了什么,请告诉我,这样我就可以学会更好地参与这个网站。
下面的getPerishedPassengers方法给了我一个越界异常。我已经研究和研究了,我似乎正在正确地填充数组,我不知道我创建的方法有什么问题。有人可以指导我如何克服这个例外吗?谢谢大家!
这是主要/方法:
int passengerMax = 2000;
int passengerActual = 0;
//Create a 2D array that will store the data from the .txt file
String[][] passengerData = new String[passengerMax][6];
//Constructor to read the file and store the data in the array
Titanic(String file) throws FileNotFoundException {
try (Scanner fileIn = new Scanner(new File(file))) {
//Conditional for reading the data
while (fileIn.hasNextLine()) {
//tab through the data to read
passengerData[passengerActual++] = fileIn.nextLine().split("\t");
}
}
}
public int getTotalPassengers() {
return passengerActual;
}
//Method for getting/returning the number of passengers that perished
public int getPerishedPassengers() {
int count = 0;
//For loop w/conditional to determine which passengers perished
for (int i = 0; i < getTotalPassengers(); i++) {
int survive = Integer.parseInt(passengerData[i][1]);
/*The program reads the file and if 1, the passenger survived. If 0,
the passenger perished. Conditional will add to the count if they
survived*/
if (survive == 0) {
count++;
}
}
return count;
}
这是我收到的堆栈跟踪。如果你们愿意,我也可以包含测试代码。提前致谢:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at titanic.Titanic.getPerishedPassengers(Titanic.java:66)
at titanic.testTitanic.main(testTitanic.java:68)
Java Result: 1
答案 0 :(得分:3)
从上面我看到的,问题在于:
int survive = Integer.parseInt(passengerData[i][1]);
我最好的猜测是,缺少输入文件,当你正在读取文件时,至少有一行创建一个长度为0或1的数组。很有可能,如果文件的最后一行是空行,这条线会导致你的数组超出边界异常,因为分割会创建一个长度为0的数组。另一个原因是一条线根本没有任何标签(比如空格而不是标签等等)。 )将创建一个长度为1的数组,其中passengerData [i] [1]将不存在,只有passengerData [i] [0]将会存在。
假设您的输入文件没有任何格式不正确的行/缺少适当数量的标签,我建议在文件读取循环中更改此行:
passengerData[passengerActual++] = fileIn.nextLine().split("\t");
为:
String incomingLine = fileIn.nextLine().trim();
if (null != incomingLine && !incomingLine.isEmpty()) {
passengerData[passengerActual++] = incomingLine.split("\t");
}