2013-12-18 37 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