Java LinkedList问题

时间:2014-02-17 02:59:11

标签: java

错误:

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,则程序会产生此错误。

所以这是一个根据用户对控制台的输入做各种事情的程序。我一直在收到这个错误,并想知道是什么导致了它。我知道我可以抓住它,但我真的想知道造成这个错误的原因。

4 个答案:

答案 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) { }

它有效(: