Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 猜谜游戏可以';无法让程序输出消息_Java_Swing - Fatal编程技术网

Java 猜谜游戏可以';无法让程序输出消息

Java 猜谜游戏可以';无法让程序输出消息,java,swing,Java,Swing,我在GUI中输入了寡妇和按钮,但就我的一生而言,我无法获得任何输出。假设我输入一个猜测,然后从一个随机数生成游戏。它应该告诉我,如果我太高,太低或正确。而且,如果它不正确,它应该告诉我我是热的还是冷的。如果有人能给我指出正确的方向,我将不胜感激。我不知道我在这件事上做错了什么。我研究了不同的主题,但用不同的方法解决这个问题,并没有一个和我想要的相匹配 代码如下: //all necessary imports public class GuessGame extends JFrame {

我在GUI中输入了寡妇和按钮,但就我的一生而言,我无法获得任何输出。假设我输入一个猜测,然后从一个随机数生成游戏。它应该告诉我,如果我太高,太低或正确。而且,如果它不正确,它应该告诉我我是热的还是冷的。如果有人能给我指出正确的方向,我将不胜感激。我不知道我在这件事上做错了什么。我研究了不同的主题,但用不同的方法解决这个问题,并没有一个和我想要的相匹配

代码如下:

//all necessary imports

public class GuessGame extends JFrame 
{
    private static final long serialVersionUID = 1L;
    private JFrame mainFrame;
    private JTextField guessField;
    private JLabel message1;
    private JLabel message2;
    private JLabel message3;
    private JLabel message4;
    private JLabel guessLabel;
    private JLabel tooHigh;
    private JLabel tooLow;
    private JButton guessButton;
    private JButton newGame;
    private JButton exitButton;
    private int randomNum = 0;
    private final int MAX_NUM = 1000;
    private final int MIN_NUM = 1;
    private int guessCount;
    private int lastDistance;

    public GuessGame()
    {
        mainFrame = new JFrame();
        guessField = new JTextField(4);
        message4 = new JLabel("I have a number between 1 and 1000 -- can you guess my number?") ;
        guessLabel = new JLabel("Please Enter Your Guess:");


        guessButton = new JButton("Guess");
        newGame = new JButton("New Game");
        exitButton = new JButton("Exit");

        Container c = mainFrame.getContentPane();
        c.setLayout(new FlowLayout());
        c.setBackground(Color.CYAN);

        c.add(message4);
        c.add(guessLabel);
        c.add(guessField);
        c.add(guessButton);
        c.add(newGame);
        c.add(exitButton);

        newGame.setMnemonic('N');
        exitButton.setMnemonic('E');
        guessButton.setMnemonic('G');

        mainFrame.setSize(420, 300);//Sets width and height of Window
        mainFrame.setVisible(true);//Allows GUI to be visible
        mainFrame.addWindowListener(new WindowAdapter()

        {
            public void windowClosing(WindowEvent e)
            {
                System.exit(0);
            }
        });

        GuessButtonsHandler gHandler = new GuessButtonsHandler();
        guessField.addActionListener(gHandler);

        ExitButtonsHandler eHandler = new ExitButtonsHandler();
        exitButton.addActionListener(eHandler);

        NewGameButtonsHandler nHandler = new NewGameButtonsHandler();
        newGame.addActionListener(nHandler);
    }

    class GuessButtonsHandler implements ActionListener
    {
        @Override
        public void actionPerformed(ActionEvent e)
        {

            Random rand = new Random();

            int guess = 0;
            int currDistance = 0;
            boolean correct = false;
            guess = Integer.parseInt(guessField.getText());//Converts String to Integer

            if(guessCount == 0)
            {
                lastDistance = MAX_NUM;
            }

            if(guess >= MIN_NUM && guess <= MAX_NUM)
            {
                guessCount += 1;
            }

            if(guess > randomNum)
            {
                 tooHigh.setText("Number To High!!!");
                 guessCount += 1;
            }

            else if(guess > randomNum)
            {
                 tooLow.setText("Number To Low!!!");
                 guessCount += 1;
            }

            else 
            {
                correct = true;
                message2.setText("Correct!!!");
                message2.setBackground(Color.GREEN);
                guessField.setEditable(false);
            }

            if(!correct)
            {
                currDistance = Math.abs(guess - randomNum);
            }

            if(currDistance <= lastDistance)
            {
                message3.setText("You are getting warmer!!!");
                mainFrame.add(message3).setBackground(Color.RED);

            }

            else
            {
                message4.setText("You are getting colder!!!");
                mainFrame.add(message4).setBackground(Color.BLUE);
            }

                lastDistance = currDistance;
                randomNum = rand.nextInt(1000) + 1;
        }

    }

    class NewGameButtonsHandler implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            Random rand = new Random();
            randomNum = rand.nextInt(1000) + 1;
            guessCount = 0;
        }
    }

    class ExitButtonsHandler implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            System.exit(0);
        }
    }
}

public class GuessGameTest {

    public static void main(String[] args) 
    {
        new GuessGame();
    }
}
//所有必要的导入
公共类猜谜游戏扩展JFrame
{
私有静态最终长serialVersionUID=1L;
专用JFrame主机;
私有JTextField猜测字段;
私有JLabel消息1;
私有JLabel消息2;
私有JLabel消息3;
私有JLabel消息4;
私人JLabel标签;
私人JLabel过高;
私人JLabel-tooLow;
私有JButton按钮;
私人杰布顿新游戏;
私有JButton exitButton;
私有int randomNum=0;
私有最终整数MAX_NUM=1000;
私有最终整数最小值=1;
私人整数猜测计数;
私人距离;
公众猜谜游戏
{
大型机=新的JFrame();
猜测字段=新的JTextField(4);
message4=newjlabel(“我有一个介于1和1000之间的数字——你能猜出我的数字吗?”);
guessLabel=新的JLabel(“请输入您的猜测:”);
猜按钮=新的JButton(“猜”);
newGame=newjbutton(“新游戏”);
exitButton=新JButton(“退出”);
容器c=mainFrame.getContentPane();
c、 setLayout(新的FlowLayout());
c、 挫折背景(颜色:青色);
c、 添加(消息4);
c、 添加(标签);
c、 添加(猜测字段);
c、 添加(猜测按钮);
c、 添加(新游戏);
c、 添加(退出按钮);
newGame.setmemonic('N');
exitButton.set助记符('E');
猜按钮。设置助记符('G');
mainFrame.setSize(420300);//设置窗口的宽度和高度
mainFrame.setVisible(true);//允许GUI可见
mainFrame.addWindowListener(新的WindowAdapter()
{
公共无效窗口关闭(WindowEvent e)
{
系统出口(0);
}
});
GuessButtonsHandler gHandler=新的GuessButtonsHandler();
addActionListener(gHandler);
ExitButtonsHandler eHandler=新的ExitButtonsHandler();
addActionListener(eHandler);
NewGameButtonHandler nHandler=新的NewGameButtonHandler();
newGame.addActionListener(nHandler);
}
类GuessButtonsHandler实现ActionListener
{
@凌驾
已执行的公共无效操作(操作事件e)
{
Random rand=新的Random();
int guess=0;
int currdance=0;
布尔正确=错误;
guess=Integer.parseInt(guessField.getText());//将字符串转换为整数
如果(猜测计数==0)
{
lastDistance=MAX_NUM;
}
如果(猜测>=MIN\u NUM&&guess randomNum)
{
setText(“数字高!!!”;
猜测计数+=1;
}
else if(猜测>随机数)
{
setText(“数字到低位!!!”;
猜测计数+=1;
}
其他的
{
正确=正确;
message2.setText(“正确!!!”);
信息2.挫折背景(颜色:绿色);
guessField.setEditable(false);
}
如果(!正确)
{
currdestance=Math.abs(guess-randomNum);
}
如果(currDistance您需要:

  • gHandler
    作为侦听器添加到按钮,而不仅仅是文本字段:

    guessField.addActionListener(gHandler);
    guessButton.addActionListener(gHandler);
    
    将其保留在文本字段中也是一个好主意:然后也可以通过按enter键触发猜测,而不仅仅是单击按钮(这部分实际上在代码中起作用)

  • 您需要初始化邮件标签,并将其添加到某个位置。您已注释掉了添加内容,但缺少初始化

  • 并非所有可能的邮件都需要标签。您希望一次只显示过高、过低或正确猜测的邮件。而不是同时显示两个或多个。因此一个字段就足够了,只需设置正确的文本即可

  • 当检查太低的数字时,您的条件已反转

  • 每次猜测后都会生成一个新的随机数,因此“变暖”消息不是很有用。此外,您不需要每次需要新的随机数时都创建一个新的
    random
    对象

  • 可能还有其他人,但希望这些能帮助你前进。

    你需要:

  • gHandler
    作为侦听器添加到按钮,而不仅仅是文本字段:

    guessField.addActionListener(gHandler);
    guessButton.addActionListener(gHandler);
    
    将其保留在文本字段中也是一个好主意:然后也可以通过按enter键触发猜测,而不仅仅是单击按钮(这部分实际上在代码中起作用)

  • 您需要初始化邮件标签,并将其添加到某个位置。您已注释掉了添加内容,但缺少初始化

  • 并非所有可能的邮件都需要标签。您希望一次只显示过高、过低或正确猜测的邮件。而不是同时显示两个或多个。因此一个字段就足够了,只需设置正确的文本即可

  • 当检查太低的数字时,您的条件已反转

  • 每次猜测后都会生成一个新的随机数,因此“变暖”消息不是很有用。此外,您不需要每次需要新的随机数时都创建一个新的
    random
    对象

  • 可能还有其他人,但希望如此