2017-02-10 180 views
0

從來就這個問題在這個測試用例計劃:開關 - 異常線程「main」 java.lang.ArrayIndexOutOfBoundsException:0

package testecase; 

public class TesteCase { 
    public static void main(String args []) { 
     // TODO code application logic here 
     switch (args [0] .charAt (0)) { 
     case 'A':System.out.println("Vogal A "); 
     break; 

     case 'E':System.out.println("Vogal E "); 
     break; 

     default:System.out.println("Não é vogal "); 

     } 
    } 
} 

我該如何解決呢?

+0

當您運行代碼時,您是否傳遞參數? – Gatusko

+1

check args.lenght> 0 –

+0

只是將一個arg傳遞給你的程序。例如在第一種情況下輸入'java TestCase Abc' – davidxxx

回答

1

的異常告訴你,在運行時args陣列沒有任何條目

您更改通過調用JVM像

java TestCase A B C 

換句話說:該數組持有您在開始的時候把它給JVM的參數。命令行上沒有任何參數......以空數組結尾。

或是給予另一種觀點:你的代碼包含了輸入數據假設:

  1. 使用args [0]要求該數組至少一個進入
  2. 使用....charAt(0)需要這第一個條目至少爲一個字符

然後猜猜看:那不一定是真的!

您瞭解了關於編程的第一個非常有價值的課程:不要指望運行時的「現實」與您的假設應該是應該是什麼樣子。

含義:當數據從外部進入時,第一步是驗證它符合您的期望。如:

if (args.length > 0) { 
... process input 
} else { 
tell user: no input 

與您打算做的String處理類似!

+0

謝謝兄弟!幫助很多= D –

+0

非常歡迎。歡迎隨時接受:-) – GhostCat

0

請確保您正在運行時,它發送一個參數傳遞給你的程序:java TesteCase A

而且,在一般情況下,你不應該相信用戶輸入,所以我建議你先檢查args來lenght。一旦你知道它不是空的,你可以嘗試閱讀它。

相關問題