2013-12-22 62 views
2

我正在爲使用Wolfram Alpha API的搜索編寫Java程序。它將問題存儲在一個文本文件中,將答案存儲在另一個文本文件中我試圖加入一項功能,告訴用戶該問題是否先前被問及&向用戶提供保存的答案(而不是搜索Wolfram Alpha)。從問題/答案文件返回字符串

Questions.listAnswers.list都將輸入/輸出存儲在相同的相應行上。我使用下面的代碼的輸出結果:

ArrayList<Question> searchArray = prevQuest(userInput); 
int index = searchList(searchArray, userInput); 

if(index >=0){ //tells program which arraylist to search and the string to search for. 
    System.out.println("This question has already been asked. The previous answer was:"); 
    previousAnswers.get(index).print(); 
    askQuestion(); // runs method again to avoid doing a WAlpha Search. 

我也是用這個方法:

public static int searchList(ArrayList<Question> list, String userInput){ 
    int j =-1; 


    for(int i=0; i<list.size()-1; i++) { 
    if(list.get(i).getQuestion().substring(0, list.get(i).getQuestion().length()).equalsIgnoreCase(userInput)){ 
     j=i; 
    } 

    return j-1; 

它返回不正確的歸檔問題的答案問 - 例如如果我以前問過是誰發明了這輛車 - 它會說「這個Q已經被問到了,以前的答案是:Kurt Cobain,在前面的問題中我可能會問這個問題,如果我將return J-1更改爲return J,它給了我一個IndexOutOfBoundsException:??。

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3 
    at java.util.ArrayList.RangeCheck(ArrayList.java:547) 
    at java.util.ArrayList.get(ArrayList.java:322) 
    at AssignmentPart7.askQuestion(AssignmentPart7.java:79) 
    at AssignmentPart7.main(AssignmentPart7.java:20) 

有誰知道我可能是做錯了或者更好的方式來做到這一點

任何幫助是極大的讚賞

感謝

+0

哪行代碼拋出此異常? – jzd

+0

@jzd'previousAnswers.get(index).print();' – Maroun

+0

你可以格式化你的代碼,那樣可讀性更好 –

回答

1

您的問題列表和答案列表必須具有不同的長度,否則您的searchList有錯誤。您的searchList方法正在返回,索引3作爲匹配,但您的答案列表中只有3個項目。

此外,返回j是正確的,而不是j-1這實際上會返回錯誤的索引。

+0

謝謝jzd。這很奇怪。當我使用j-1時,即使在兩個列表大小相同的情況下,它也會返回不正確的答案 - 例如每個5行,每個列表中的Q&A佔用相同的1行。 – mickm

+0

它不應該是奇怪的。 j-1是它應該在的地方。你不需要修改j。 – jzd