当我的程序进入我的代码的这一部分时,它会崩溃并产生此错误
public static boolean Search(ArrayList<String> ArrayToSearch,String word)
{
String temp;
boolean found = false;
for(int counter = 0;found || counter < ArrayToSearch.size();counter++)
{
temp = ArrayToSearch.get(counter);
if(temp.equals(word.toLowerCase()))
{
found = true;
position = counter;
}
}
return found;
}
ArrayToSearch
是不同的数组列表,每行包含一个单词,表示字典。 Word是用户想要搜索的单词。这是它产生的错误。 Add是一个调用此方法并从中接收一个布尔值的方法
D:\>java Evan
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 109680, Size: 109680
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at Evan.Search(Evan.java:95)
at Evan.Add(Evan.java:68)
at Evan.main(Evan.java:53)
D:\>
答案 0 :(得分:5)
这是问题所在:
found || counter < ArrayToSearch.size()
如果found
变为真,那将永远 - 或者更确切地说,直到它因为这个异常而爆炸。我怀疑你意味着
!found && counter < ArrayToSearch.size()
换句话说:&#34;在我们找不到这个词的同时继续前进,还有更多的收藏要透过。&#34;
然而,只要在找到结果后直接返回就会更清楚。如果你使用增强的for循环也会更简单:
// Names change to follow conventions
public static boolean search(List<String> list, String word) {
// TODO: Handle the possibility of anything being null
for (String candidate : list) {
if (candidate.equals(word)) {
return true;
}
}
return false;
}
或者更简单地说,只需使用已经执行此操作的List.contains
。
答案 1 :(得分:1)
查看停止条件found || counter < ArrayToSearch.size()
。如果您找到了所需的元素怎么办?在这种情况下,found
将true
和stop
- 条件始终为true
,您的循环将永不停止。正确的循环如下:
public static boolean Search(ArrayList<String> ArrayToSearch,String word)
{
String temp;
for(int counter = 0;counter < ArrayToSearch.size();counter++)
{
temp = ArrayToSearch.get(counter);
if(temp.equals(word.toLowerCase()))
{
position = counter;
return true;
}
}
return false;
}
答案 2 :(得分:0)
您的密码:
for(int counter = 0;found || counter < ArrayToSearch.size();counter++)
写得像:
for(int counter = 0;counter < ArrayToSearch.size();counter++)
答案 3 :(得分:0)
问题在于你for-loop
。如果找到这个词你需要突破循环
public static boolean Search(ArrayList<String> ArrayToSearch,String word) {
String temp;
boolean found = false;
for(int counter = 0; counter < ArrayToSearch.size(); counter++) {
temp = ArrayToSearch.get(counter);
if(temp.equals(word.toLowerCase())){
position = counter;
break; //found
}
}
return found;
}
答案 4 :(得分:0)
错误的圈子() for(int counter = 0; found || counter&lt; ArrayToSearch.size(); counter ++)
问题是当发现为false并且计数&gt; ArrayToSearch.size()你将有IndexOutOfBoundsException