[英]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.