2017-05-07 72 views
-1

工作原理:這是一個hang子手的搖擺小程序。 「消息框」是​​顯示他們剩下多少猜測,然後顯示他們最終是贏還是輸。 「輸出窗格」是顯示空白字母空間和他們猜測的字母。 (例如:如果這個詞是狗,它會顯示_ _ _,如果他們猜測一個D,它將是d _ _)。Hang子手搖擺小程序凍結

問題:當我運行它時,我可以輸入該單詞並按下確定。它在輸出窗格中僅顯示一個下劃線,並在消息框中顯示「您有6次嘗試猜測」。然後出現一堆錯誤,應用程序崩潰。我沒有第二個確定按鈕的事件處理程序,他們輸入他們的字母猜測,但我知道我需要一個。我只是混淆了哪些代碼應該移至該事件處理程序。

enter image description here

private void okButtonWordWordActionPerformed(java.awt.event.ActionEvent evt) {             
String wordToGuess = wordToGuessTextBox.getText(); 
    char[] underscore = new char[wordToGuess.length()]; 
    for (int i = 0; i < wordToGuess.length(); i++) { 
     underscore[i] = '_'; 
    } 

    for (int i = 0; i < wordToGuess.length(); i++) { 
     underscore[i] = '_'; 
    } 

    int wordLenToGuess = wordToGuess.length(); 
    int unsuccessfulTries = 6; 

    while(wordLenToGuess >0 && unsuccessfulTries >0){ 
     for (int i = 0; i < wordToGuess.length(); i++) { 
      outputPane.setText(" " + underscore[i] + " "); 
        } 


     messageBox.setText("You have " +unsuccessfulTries+ " tries to make a guess"); 
     char guess = letterGuess.getText().charAt(0); 
     boolean iscorrect = false; 
     for (int i = 0; i < underscore.length; i++) { 
      if(wordToGuess.charAt(i) == guess) 
      { 
       underscore[i] = guess; 
       wordLenToGuess--; 
       iscorrect = true; 
      } 
     } 

     if(!iscorrect) 
      unsuccessfulTries--; 
    } 

    if(wordLenToGuess == 0) 
     messageBox.setText("YOU WIN!! :)"); 
    else messageBox.setText("Sorry! You Lose :("); 


}       
+1

你的'while-loop'阻塞了事件分派線程,基本上'wordLenToGuess'沒有被簡化爲'0',因爲如果我第一次沒有做出準確的猜測,被猜測。我鼓勵你使用調試器,並逐步瞭解代碼,並理解它爲什麼不起作用,它會幫助你更好地理解你將如何修復它 – MadProgrammer

+0

另請參見[*「Java小程序是否值得學習?」]( https://softwareengineering.stackexchange.com/a/196500/110799) – Radiodef

+0

1)*「然後出現一堆錯誤」*始終複製/粘貼錯誤和異常輸出! 2)爲了更快地獲得更好的幫助,請發佈[MCVE]或[簡短,獨立,正確的示例](http://www.sscce.org/)。 –

回答

0

你只得到一個下劃線的原因是因爲你不斷設置在輸出窗格中的文字爲「」 +下劃線[I] +「」。每次設置文本時,您都有效地刪除之前存在的任何文本。

對於此問題,您可以在設置文本之前將空格和下劃線合併爲一個字符串。

至於例外情況,我肯定會添加一個異常處理程序;但是,這實際上並不能解決問題。在這種情況下,錯誤通常是由錯誤處理的數組引起的。我會仔細檢查它們,確保您沒有初始化或調用不存在的元素。