2014-02-17 92 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