簡體   English   中英

查找索引超出范圍異常

[英]Finding index out of bounds exception

在我對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"));
}

有兩個可能的問題

1 在這條線

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

您應該使用i < mainMenuItems.size()

2 當您尚未為LinkedList分配任何值時,您嘗試訪問LinkedList的索引

<=更改為< in: i<= mainMenuItems.size()

編輯:
如果mainMenuItems仍然為空,則行mainMenuItems.get(i).contains(existingItem)將生成java.lang.IndexOutOfBoundsException因為mainMenuItems.get(i)不存在。

首先-如下所示更改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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM