在我的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"));
}
答案 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