2015-12-10 96 views
0

像標題所說,我的問題是,當我編譯我在線程「主」java.lang.IndexOutOfBoundsException異常:索引:1,大小:1。這是問題來自的部分。java.lang.IndexOutOfBoundsException:索引:1,大小: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) 
+0

一個很好的堆棧跟蹤將有助於在這裏了很多,我相信。 –

+0

對不起,我還是很新的Java。什麼是堆棧跟蹤? – Scheids

+0

@Scheids'stacktrace'是你得到的完全異常 –

回答

1

你的for循環是關於flightList而不是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))); 
} 
+0

非常感謝你,修復! – Scheids

2

請看看這兩個區塊

循環,直到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()

列表是用usi創建的低於條件,意思是size of list will always be less than or equal to size of flightList

但是,上面的getPrice(list.get(i)正在使用來自父列表(flightList)的索引。

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

謝謝,這使得更多的意義! – Scheids

+0

@Scheids這是現在你可以調試和跟蹤它的東西,因爲在運行時什麼是數據,這兩個列表的大小是什麼,我們無法知道 –

相關問題