我的java程序给了我一个IndexOutOfBoundsException

时间:2014-04-03 12:28:06

标签: java runtime-error indexoutofboundsexception

当我的程序进入我的代码的这一部分时,它会崩溃并产生此错误

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:\>

5 个答案:

答案 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()。如果您找到了所需的元素怎么办?在这种情况下,foundtruestop - 条件始终为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