Java 程序中的双输出

Java 程序中的双输出,java,swing,logic,output,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!

当我运行代码时,我会得到两次输出,而不是一次。这是什么原因?还有,我怎样才能输出计算机猜单词的次数?这是当前输出:但当我输入一个单词时,它会输出两次吗

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

}

}
import java.util.Scanner;
导入javax.swing.JApplet;
导入java.awt.*;
公共级刽子手
{
公共空间绘制(图形页)
{
//绞刑架
第页.拉线(0300,20300);
页码.抽绳(10,40,10300);
第页.抽绳(10,40,80,40);
第页.抽绳(80,40,80,55);
//躯干
第页:drawOval(50,55,50,55);
第2页:drawOval(50100,50100);
//左臂和手
第页.抽绳(50150,40110);
第页.抽绳(4011045100);
页码:抽绳(40110251000);
页码:抽绳(4011025115);
//右臂和右手
第页.抽绳(100150120110);
第页.抽绳(120110115,95);
第页.抽绳(120110125,95);
第页.抽绳(120110135115);
//左腿和脚
第页.抽绳(80200100250);
第页.抽绳(100250、115260);
//右腿和脚
页码.抽绳(75200,60250);
第页.抽绳(60250,45260);
扫描仪输入=新扫描仪(系统输入);
System.out.println(“输入一个4或5个字母的单词,计算机将扮演刽子手来对付你!”);
String word=in.nextLine();
char[]字母=word.toCharArray();
for(int i=0;i
因为您将所有内容都放在绘制函数中,所以如果小程序重新绘制,它将再次被调用。因此,您会注意到,如果不调整小程序的大小或执行任何其他可能导致其重新绘制的操作,那么它将不会有双重输出。您可以通过从包含hangman文本逻辑的main创建小程序来修复此问题


至于如何告诉它执行了多少步,应该在嵌套for循环外部将一个额外的计数器初始化为0,在嵌套for循环内部将其递增。由于在找到正确的单词时中断,该计数器将具有尝试次数。

不要在基于GUI的应用程序中使用控制台输入。用户输入应该通过使用一个或多个可用的UI控件来获得

在Swing中进行绘制可能有多种原因,其中许多原因是您无法控制的,这意味着当Swing想要更新您的UI时,它将调用paint,这意味着您经常被要求提供一个新词

另外,您正在阻止绘制过程,这意味着在绘制方法退出之前,不太可能绘制任何内容


首先看一看,当您理解这一点时,

与如何调用
JApplets
paint
方法有关。不要在那里输入。不知何故,您的
paint
方法调用了两次。简单解决方案创建另一个用于获取输入的类/方法。您不应该将基于控制台的输入与GUI应用程序(尤其是小程序)混合,因为“普通”用户不太可能打开小程序控制台,这意味着他们永远无法将输入输入输入到程序中