程序中的双输出

时间:2013-12-18 19:54:08

标签: java swing logic output

当我运行我的代码时,我得到两次输出而不是一次。是什么导致这个?另外,我如何输出计算机猜单词的次数?这是当前的输出:但是当我输入一个单词时它会输出两次?

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);
     }

}

}

2 个答案:

答案 0 :(得分:2)

不要将控制台输入与基于GUI的应用程序一起使用。应使用一个或多个可用的UI控件来获取用户输入。

Swing中的绘画可能由于多种原因而发生,其中许多是你无法控制的,这意味着当Swing想要更新你的UI时,它会调用paint,这意味着你不断被要求提供一个新的字

另外,你正在阻止绘制过程,这意味着在你绘制方法出口之前,它不可能被绘制任何东西

首先看看How to create a GUI with Swing,当您了解这一点时,Performing Custom Painting

答案 1 :(得分:0)

因为你把所有东西都放在了paint函数中,所以如果applet重新渲染它将再次被调用。所以你会注意到如果你没有调整applet的大小或做任何会导致它重绘的事情,那么它就不会有那个双输出。您可以通过从包含hangman文本逻辑的main创建applet来解决此问题。

至于如何判断它采取了多少步骤,你应该在嵌套for循环之外将一个额外的计数器初始化为0,并且在内部嵌套for循环中你应该增加它。由于您在找到正确的单词时中断,该计数器将具有尝试次数。