2013-12-18 77 views
0

當我運行我的代碼時,我得到了輸出兩次而不是一次。這是什麼原因?另外我怎樣才能輸出計算機猜測這個單詞的次數呢?這是當前的輸出:但是當我輸入一個單詞時,它會輸出兩次?雙輸出程序

Enter a 4 or 5 letter word and the computer will play hangman against you! 
nice 
Your word is: nice 
Enter a 4 or 5 letter word and the computer will play hangman against you! 

代碼

import java.util.Scanner; 
import javax.swing.JApplet; 
import java.awt.*; 

public class Hangman extends JApplet 
{ 
    public void paint (Graphics Page) 
    { 
       //gallows 
       Page.drawLine(0,300,20,300); 
       Page.drawLine(10,40,10,300); 
       Page.drawLine(10,40,80,40); 
       Page.drawLine(80,40,80,55); 

       //torso 
       Page.drawOval(50,55,50,55); 
       Page.drawOval(50,100,50,100); 
       //left arm and hand 
       Page.drawLine(50,150,40,110); 
       Page.drawLine(40,110, 45,100); 
       Page.drawLine(40,110, 25,100); 
       Page.drawLine(40,110, 25,115); 


       //right arm and hand 
       Page.drawLine(100,150,120,110); 
       Page.drawLine(120,110, 115,95); 
       Page.drawLine(120,110, 125,95); 
       Page.drawLine(120,110, 135,115); 

       //left leg and foot 
       Page.drawLine(80,200,100,250); 
       Page.drawLine(100,250, 115,260); 


       //right leg and foot 
       Page.drawLine(75,200,60,250); 
       Page.drawLine(60,250,45,260); 




    Scanner in = new Scanner(System.in); 
    System.out.println("Enter a 4 or 5 letter word and the computer will play hangman against you!"); 



    String word = in.nextLine(); 




    char[] letter = word.toCharArray(); 


    for (int i = 0; i < letter.length; i++) { 
      letter[i] = 'a'; 
    } 


    for (int i = 0; i < word.length(); i++){ 
     for (int j = 48; j < 122; j++) { 

        if (letter[i] == word.charAt(i)) { 
          break; 
        } else { 
          letter[i] = (char)((int) j + 1); 
        } 
      } 
    } 
    System.out.println("Your word is: "); 

    for (char letters : letter) { 
      System.out.print(letters); 
    } 

} 

} 
+0

與'JApplets'如何調用其'paint'方法有關。不要在那裏做輸入。 –

+0

我該如何解決這個問題? – user3112609

+2

不知怎的,你的'paint'方法調用兩次。簡單的解決方案使另一個類/方法進行輸入。 –

回答

0

因爲你把一切油漆函數內,它將被再次如果applet重繪調用。所以你會注意到,如果你不調整applet的大小或者做任何會導致它重繪的東西,那麼它就不會有這個雙重輸出。你可以通過從包含hangman文本邏輯的main創建applet來解決這個問題。

至於如何告訴它花了多少步,你應該初始化爲0以外嵌套的for循環和內內嵌套的循環,你應該增加它一個額外的計數器。由於當找到正確的單詞時會中斷,該計數器將有嘗試的次數。

+1

你不應該基於混合控制檯輸入與GUI應用,尤其是小程序,爲「一般」的用戶不太可能有小程序控制臺打開,這意味着他們將永遠無法把輸入到程序 – MadProgrammer

2

不要在基於GUI的應用程序中使用控制檯輸入。用戶輸入應該通過使用一個或多個可用的UI控件來獲得。

Swing中的繪畫可能會出於多種原因,其中許多是您無法控制的,這意味着當Swing想要更新您的UI時,它會調用繪畫,這意味着您不斷被要求提供一個新詞

而且,你擋住了烤漆工藝,這意味着直到你畫的方法退出,這是不可能的,任何事情都會被塗上

開始通過How to create a GUI with Swing考慮看看,當你明白,Performing Custom Painting