我正在编写一个使用 Wolfram Alpha API 的 Java 搜索程序。它将问题存储在一个文本文件中,并将答案存储在另一个文本文件中。我正在尝试合并一个功能,告诉用户问题是否以前被问过,并为用户提供保存的答案(而不是搜索 Wolfram Alpha)。
Questions.list
和 Answers.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已经被问过了。之前的答案是:库尔特·科本。我可能在上一个问题中问过这个问题。如果我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)
有谁知道我可能做错了什么?还是更好的方法?
任何帮助将不胜感激。
谢谢。
您的问题列表和答案列表实际上必须具有不同的长度,否则您的searchList
存在错误。您的searchList
方法是返回 和索引 3 作为匹配项,但您的答案列表中只有 3 个项目。
此外,返回j
是正确的,而不是实际上返回错误索引的j-1
。