2012-11-15 91 views
1

我有一個非常簡單的程序,只有一個文本框和一個按鈕。陣列出界問題

用戶被告知將兩種顏色的名稱放在框中,用空格分隔。

例如「紅色綠色」 輸出將在屏幕上打印,「蘋果是紅色的,帶有綠色圓點。」。

但是我需要它在屏幕上只輸入一個單詞的情況下運行。我正在使用一個數組來保存拆分字符串。當我只輸入紅色時,我得到這個錯誤。

「AWT-EventQueue的 - 0」 java.lang.ArrayIndexOutOfBoundsException:

下面是代碼:

String userInput = textField.getText(); 
String[] userInputSplit = userInput.split(" "); 
String wordOne = userInputSplit[0]; 
String wordTwo = userInputSplit[1]; 
if (wordTwo !=null){ 
       System.out.println("The apple is " + wordOne + " with " + wordTwo + " dots."); 
       } else { 
       System.out.println("The apple is " + wordOne + " with no colored dots."); 
       } 

回答

2

可能只是做一些簡單的像這樣:

String wordOne = userInputSplit[0]; 
String wordTwo = null; 
if (userInputSplit.length > 1){ 
    //This line will throw an error if you try to access something 
    //outside the bounds of the array 
    wordTwo = userInputSplit[1]; 
} 
if (wordTwo !=null) { 
    System.out.println("The apple is " + wordOne + " with " + wordTwo + " dots."); 
} 
else { 
    System.out.println("The apple is " + wordOne + " with no colored dots."); 
} 
+0

我會使用'字符串wordTwo = userInputSplit.length> 1? userInputSplit [1]:null;',我覺得更容易解析,但這只是我。 –

+0

@DanielFischer是的,這將是更清潔,但由於這個問題是相當基本的,我認爲使用條件運算符會給OP增加更多的困惑。 –

+0

@MadProgrammer有什麼問題?我沒有看到任何問題,但目前我沒有編譯器在我面前。 –

2

您可以附帶您的打印邏輯與警衛if聲明:

if (userInputSplit.length > 1) { 
    String wordOne = userInputSplit[0]; 
    String wordTwo = userInputSplit[1]; 
    ... 
} 
+0

太快了,正在更新.... – Reimeus

+0

不用擔心;)... – MadProgrammer

+0

非常感謝您的回覆。這與KDiTraglia的迴應一起工作。 – Xavier

2

你也可以做一個前置條件檢查,看是否從用戶輸入包含空格...

String userInput = textField.getText(); 
userInput = userInput.trim(); // Remove any leading/trailing spaces 
if (userInput != null && userInput.length() > 0) { 
    StringBuilder msg = new StringBuilder(64); 
    if (userInput.contains(" ")) { 
     String[] userInputSplit = userInput.split(" "); 
     String wordOne = userInputSplit[0]; 
     String wordTwo = userInputSplit[1]; 
     msg.append("The apple is ").append(wordOne); 
     msg.append(" with ").append(wordTwo).append(" dots"); 
    } else { 
     msg.append("The apple is ").append(userInput).append(" with no colored dots."); 
    } 
    System.out.println(msg); 
} else { 
    // No input condition... 
} 

這是看待問題的另一種方式......

+0

非常感謝你,我從你的代碼片段中學到了一些東西,可以用它來做類似的事情。 – Xavier

+0

很高興幫助;) – MadProgrammer