查找索引超出范围的异常

时间:2014-09-21 06:46:33

标签: java indexoutofboundsexception

在我的addMainMenu方法中做了一些更改之前,这个程序一切顺利。现在好像有一个数组索引超出界限。 Eclipse也没有引领我。有谁知道为什么这段代码有一个超出范围的数组索引。

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.LinkedList.checkElementIndex(Unknown Source)
    at java.util.LinkedList.get(Unknown Source)
    at Menu.main(Menu.java:58)

import java.util.LinkedList;
import java.util.List;

public class Menu {
    LinkedList <LinkedList> mainMenuItems = new LinkedList <LinkedList> ();

    public void  Menu(){}

    public boolean addMainMenuItem(String newItem, String existingItem, int position){
        LinkedList <String> subMenuItems = new LinkedList <String> ();
        for (int i = 0; i<= mainMenuItems.size(); i++){
            if (mainMenuItems.get(i).contains(existingItem)){
                subMenuItems.addLast(newItem);
                int existingIndex = mainMenuItems.indexOf(existingItem);
                if (position == 1){
                    mainMenuItems.add(existingIndex + 1, subMenuItems);
                    break;
                }
                if (position == -1){
                    mainMenuItems.add(existingIndex, subMenuItems);
                    break;
                }
                if (i == mainMenuItems.size()){
                    subMenuItems.addLast(newItem);
                    mainMenuItems.add(subMenuItems);
                    break;
                }
            }
        }
    }
    return true;
}

public boolean deleteMainMenuItem(String item){
    if (mainMenuItems.contains(mainMenuItems.indexOf(item))){
        mainMenuItems.remove(mainMenuItems.indexOf(item));
        return true;
    }
    else{
        return false;
    }
}

public static void main(String[] args){
    Menu b = new Menu();
    b.addMainMenuItem("h", "b", 1);
    b.addMainMenuItem("hi", "h", 1);
    b.addMainMenuItem("i", "h", 1);
    System.out.println(b.mainMenuItems.get(0));
    b.deleteMainMenuItem("hi");
    System.out.println(b.mainMenuItems.get(0));
    System.out.println(b.deleteMainMenuItem("hi"));
}

3 个答案:

答案 0 :(得分:2)

有两个可能的问题

<强> 1 即可。在这一行

for (int i = 0; i<= mainMenuItems.size(); i++)

你应该使用i < mainMenuItems.size()

<强> 2 即可。如果尚未为LinkedList分配任何值,则尝试访问LinkedList的索引

答案 1 :(得分:1)

<=更改为<中的i<= mainMenuItems.size()

修改
如果mainMenuItems仍然为空,则行mainMenuItems.get(i).contains(existingItem)将生成java.lang.IndexOutOfBoundsException,因为mainMenuItems.get(i)不存在。

答案 2 :(得分:0)

首先 - 更改for循环,如下所示

for (int i = 0; i < mainMenuItems.size(); i++)

此外,您需要重新构建addMainMenuItem方法,如下所示 -

for (int i = 0; i < mainMenuItems.size(); i++){
    if (mainMenuItems.size() == 0) {
        //you should put list initialization code here
        //means, logic when there is nothing in the mainMenuItems list
    } else {
        //when the list is not empty
    }
}

您正在获取IndexOutOfBoundsException,因为您正在mainMenuItems上执行get(index) - 在for循环中为空。

例如 -

List<String> list = new LinkedList<String>();
list.get(0);    //will throw the same exception