java.lang.IndexOutOfBoundsException: Index: 1, Size: 1 意思是:索引越界异常:索引为1,大小为1。

4
就像标题所说,我的问题是当我编译时,会出现异常信息“Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1”,这是问题出现的部分。
编辑。
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1   
at java.util.ArrayList.rangeCheck(ArrayList.java:653)   
at java.util.ArrayList.get(ArrayList.java:429)  
at pa6.FlightFinder.bestDirectPrice(FlightFinder.java:117)  
at pa6.FlightFinder.main(FlightFinder.java:14)


public static ArrayList<String> bestDirectPrice(ArrayList<String> flightList,String city1, String city2) {
ArrayList<String> list = new ArrayList<String>();
ArrayList<String> Price = new ArrayList<String>();
for (int i=0; i<flightList.size(); i++) {
    list = directFlights(flightList, city1, city2);
    Price.add(getPrice(list.get(i)));

}
return Price;

我一直在网上寻找解决方案,所以我很确定问题是数组太小了,但我还不确定如何解决。我试图让代码的上半部分只提取数组中的数字并将它们放入一个新的数组中。

ArrayList<String> test = new ArrayList<String>(); //Array with list of flights
test.add("Orlando#DesMoines#194.88");
test.add("Portland#Orlando#287.74");
test.add("Buffalo#Boston#299.52"); 
test.add("Buffalo#Portland#264.80"); 
test.add("Chicago#Buffalo#223.56");

System.out.println(bestDirectPrice(test,"Buffalo","Orlando"));

这里是我正在调用的其他方法。

public static String getPrice(String price) { //Takes flight description, which is a string, as a parameter and returns price of flight
String[] sArray = price.split("#", -1);
String newPrice = "";
for (int i = 0; i<1; i++)       
    newPrice = sArray[2];
return newPrice;
}

public static ArrayList<String> directFlights(ArrayList<String> flightList, String city1, String city2) { // Method to create array list containing every direct flight from city1 to city 2
ArrayList<String> list = new ArrayList<String>();
for (int i=0; i<flightList.size(); i++){
    String city2a = getDestinationCity(flightList.get(i));
    String city1a = getOriginationCity(flightList.get(i));
    if (city1a.equals(city1) && city2a.equals(city2)) {
        list.add(flightList.get(i));
    }
}
return list;
}

我卡在这里有一段时间了,所以任何帮助都将不胜感激!

编辑。

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1   
at java.util.ArrayList.rangeCheck(ArrayList.java:653)   
at java.util.ArrayList.get(ArrayList.java:429)  
at pa6.FlightFinder.bestDirectPrice(FlightFinder.java:117)  
at pa6.FlightFinder.main(FlightFinder.java:14)

我相信一份漂亮的堆栈跟踪会对这里有很大帮助。 - Tim Biegeleisen
抱歉,我对Java还不是很熟悉。什么是堆栈跟踪? - Scheids
@Scheids,你正在收到完整的异常stacktrace - Ankur Singhal
是的,这个错误输出可能会让你找到问题所在的确切行。 - Tim Biegeleisen
2个回答

3
请查看以下两个区块:
循环直到 i < flightList.size() 但是getPrice(list.get(i)使用了上面的索引,但在不同的列表中
for (int i=0; i<flightList.size(); i++) {
    list = directFlights(flightList, city1, city2);
    Price.add(getPrice(list.get(i)));

}

在方法内部,directFlights()

以下条件用于创建列表,意味着列表的大小始终小于或等于flightList的大小

但是,在上述代码中getPrice(list.get(i)使用了来自父列表(flightList)的索引。

if (city1a.equals(city1) && city2a.equals(city2)) {
        list.add(flightList.get(i));
    }

谢谢,现在更加清晰明了了! - Scheids
@Scheids,现在你可以调试和跟踪它了,因为在运行时我们无法知道数据是什么,两个列表的大小是多少。 - Ankur Singhal

1
你的for循环是针对flightList的,而不是list。每次迭代中,你都会重新分配一个新值给list,而不是添加一个新元素。
尝试更改:
for (int i=0; i<flightList.size(); i++) {
    list = directFlights(flightList, city1, city2);
    Price.add(getPrice(list.get(i)));

}

list = directFlights(flightList, city1, city2);
for (int i=0; i<list.size(); i++) {
    Price.add(getPrice(list.get(i)));
}

非常感谢,问题已解决! - Scheids

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接