2015-02-09 72 views
1

我想驗證我的jtextfeild只輸入貨幣值。其中只包括數字和一站式服務。 ex-17652.50
所以我嘗試了這種方法。但在執行過程中,我得到這個java.lang.ArrayIndexOutOfBoundsException:1
如何阻止此java.lang.ArrayIndexOutOfBoundsException?

這裏是方法。

private void jTextField1KeyTyped(java.awt.event.KeyEvent evt) {          
    try { 
     char c = evt.getKeyChar(); 
     String mny[] = jTextField1.getText().split("\\."); 
     if (!((c >= '0') && (c <= '9') || (c == KeyEvent.VK_BACK_SPACE) || (c == KeyEvent.VK_DELETE) || (c == KeyEvent.VK_ENTER) || (c == KeyEvent.VK_TAB) || (c == KeyEvent.VK_NUM_LOCK) || (c == '.'))) { 
      getToolkit().beep(); 
      evt.consume(); 
     } 
     if (mny[1].length() == 2) { 
      getToolkit().beep(); 
      evt.consume(); 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

我得到越界異常的數組索引後,我輸入了textfeild第一個數字。據我瞭解,這是發生,因爲mny [o]應該發生在我進入最高限度後。但我找不到解決方案。請幫幫我。 謝謝。

回答

2

IY有你沒有點輸入String mny[] = jTextField1.getText().split("\\.");會返回一個數組只有一個項目。 Java中的數組基於零。所以mny[1].length()會拋出一個ArrayIndexOutOfBoundsException

您應該檢查在這裏如果你的陣列有大小2

if (mny.length > 1 && mny[1].length() == 2) { 
+0

我做到了..它的工作非常感謝你的幫助.. – 2015-02-09 11:26:48

2

您可以將您的狀態更改爲:

if (mny.length > 1 && mny[1].length() == 2) { 
     getToolkit().beep(); 
     evt.consume(); 
    } 

(或類似的東西,這取決於所需的邏輯)

+0

耶工作的..謝謝你這麼多..我試過(MNY [0]。長度> 1 && MNY [1]。長度()== 2)但從來沒有想過這一個..:D:D謝謝你... – 2015-02-09 11:23:24