2014-02-17 93 views
-1

错误:爪哇链表问题

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

如果你猜(或实际想出一个明智的答案),为什么你认为它发生了什么? –

+2

你正在请求索引3到一个大小为2的列表。 –

+1

Lol没关系,我看到我做错了什么(: – Arc

回答

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(command.size()==3 && command.get(2).equalsIgnoreCase("/e")) { } 
else if(command.size()==2) { } 

和它的作品(:

0

你的错误似乎是由

command.get(3).equalsIgnoreCase("/e")) 

引起不存在索引3.检查是否该指数第一存在,你这样做之前。

+1

...或处理异常时,它失败。 – John3136

+0

也是,但条件是通常比例外更有效。 –

0

你会得到一个IndexOutOfBoundsException,就像它说的那样,当你试图访问一个集合/数组中的一个位置,并且该位置是空的,你试图访问一个不存在的索引。如果你不希望发生这种情况,那么强制程序使用一个尺寸超过3个元素的Collection。

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个要素。

所以你最好在command.get(3)之前加上条件command.size() >= 3