错误:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 2
at java.util.LinkedList.checkElementIndex(LinkedList.java:553)
at java.util.LinkedList.get(LinkedList.java:474)
at InterfacePackage.Main.main(Main.java:116)
Java Result: 1
代码(缩写):
if(input.length() > 0)
{
if(command.size() == 1)
{
switch(command.get(0).toLowerCase())
{
case "exit":
case "qqq":
active = false;
break;
default:
System.out.println("invalid input, for complete list of commands enter 'help'...");
break;
}
}
else if(command.size() > 1)
{
if(command.get(0).equalsIgnoreCase("shutdown") && command.size()==3)
{
Shutdown shutdown = new Shutdown();
shutdown.Start(command);
}
else if(((command.get(0).equalsIgnoreCase("scan")
&& command.get(1).equalsIgnoreCase("ips"))
|| command.get(3).equalsIgnoreCase("/e"))
&& (command.size()>=2 || command.size()<4))
{
SystemsIPs sips = new SystemsIPs();
sips.Start(command);
}
else
{
System.out.println("invalid input, for complete list of commands enter 'help'...");
}
}
}
当用户在else if(command.size() > 1)
循环中不存在的行中输入两个字符串时,会发生错误。
例如,如果用户输入:hello world
,则程序会产生此错误。
所以这是一个根据用户对控制台的输入做各种事情的程序。我一直在收到这个错误,并想知道是什么导致了它。我知道我可以抓住它,但我真的想知道造成这个错误的原因。
答案 0 :(得分:0)
您的错误似乎是由
引起的command.get(3).equalsIgnoreCase("/e"))
没有索引3.在您执行此操作之前,先检查该索引是否存在。
答案 1 :(得分:0)
你得到的是一个IndexOutOfBoundsException
,当你试图访问一个集合/数组中的某个位置并且该位置为空时,你会尝试访问一个索引不存在。如果您不希望发生这种情况,请强制程序使用大小超过3个元素的Collection。
答案 2 :(得分:0)
问题出在这一行:
else if(((command.get(0).equalsIgnoreCase("scan") &&
command.get(1).equalsIgnoreCase("ips")) ||
command.get(3).equalsIgnoreCase("/e")) &&
(command.size()>=2 || command.size()<4))
您正在使用command.get(3)
来检索LinkedList
的第3个元素,但不保证列表中至少有3个元素。
因此,您最好在command.size() >= 3
之前添加条件command.get(3)
。
答案 3 :(得分:0)
好的,这就是我如何解决问题的方法:
else if((command.get(0).equalsIgnoreCase("scan") && command.get(1).equalsIgnoreCase("ips")) && (command.size()>=2 || command.size()<4))
所以我删除了
|| command.get(3).equalsIgnoreCase("/e"))
...完全来自代码,并改进了if if语句指向的单独类中的情况。
这是我在单独的课程中所做的......
if(command.size()==3 && command.get(2).equalsIgnoreCase("/e")) { }
else if(command.size()==2) { }
它有效(: