2012-10-13 23 views
0

我的程序完全按照我希望的方式工作,但是當我將問題留空或單擊確定時,我的輸出將所有這些錯誤顯示爲紅色。我想知道如何解決這個問題,所以當我輸入什麼時,我應該得到null或一個空字符串。我相信下面的程序,我已經搞定了,但我需要這些數據來使我的程序工作。有什麼我失蹤,以確保我可以得到null或空字符串。Java - 當我在輸入中沒有輸入任何內容時,出現紅色錯誤

謝謝!

input = JOptionPane.showInputDialog(null, "Ask any question (Remember to type the ?):"); 
i = input.length() - 1; 
lastletter = input.charAt(i); 
+0

這些錯誤是拋出異常。請複製並粘貼到這裏,以便我們看到它是哪個異常以及堆棧跟蹤是什麼。 – amit

+0

所有這些紅色錯誤都會生成,以便您可以通過閱讀錯誤消息來診斷錯誤。閱讀。小心。 –

+0

有關詳細信息,請參閱此處@ user1743969:http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#charAt(int) – Jimmy

回答

4

當輸入任何內容,input.length()回報0。然後你採取0-1並得到i包含-1。然後,您試圖在空輸入中獲得索引-1上的字符。在檢索最後一個字母之前,您必須檢查input.length()是否等於0

2

當你什麼都沒輸入,input變成""。因此,input.length() - 1的計算結果爲-1,這意味着您打電話給input.charAt(-1)。這導致StringIndexOutOfBoundsException被拋出,產生你的「紅色錯誤」。

1

字符串的chatAt(index)返回指定索引處的任何字符,其中索引的範圍可以是0到字符串的長度減1,即。 string.lenght()-1並且必須是積極的。 超出此範圍的任何索引都會給你`IndexOutOfBoundsException。

所以你的具體情況,

i = input.length() - 1; 
lastletter = input.charAt(i); 

當你輸入任何內容,input.length()返回0,因此,我爲-1。 由於Java規範說對的charAt()的有效範圍是從0到input.length() - 1,其中input.length() - 1必須爲正數,你的代碼拋出IndexOutOfBoundsException

您可以通過檢查避免它如果索引 'i' 是負恩:

i = input.length() - 1; 
if (!i<0){ 
    lastletter = input.charAt(i); 
} 

參考http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#charAt(int)瞭解更多詳情。

1

JOptionPane.showInputDialog(null, "Ask any question (Remember to type the ?):"); 

會返回一個空字符串(「」),如果用戶點擊不輸入任何文字好。此字符串的長度爲零,並嘗試訪問索引爲-1的字符將引發indexOutOfBoundsException。通過檢查輸入的長度可以很容易地解決這個問題。但在此之前,您需要檢查輸入是否等於null,因爲如果用戶按下取消或右上角的「x」,則返回該值。所以你需要的檢查是:

if (input != null && input.length() > 0){ 
    lastletter = input.charAt(input.length - 1); 
} 
相關問題