You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在随机数与用户输入相同时停止Timer并终止Java程序?

问题描述
  • 这是一个生成随机数的类
  • 需求:当生成的随机数与用户输入的数字相同时,停止Timer计时器,显示You Won!!!!并终止程序
  • 当前问题:手动关闭弹窗时,若数字匹配会正常显示获胜,但即使之前出现过匹配数字,程序最终仍会显示You Lost!,需要实现匹配时自动停止Timer的功能
解决方案

在每次生成随机数后,立即检查是否与用户输入的数字匹配。如果匹配,直接停止计时器、输出获胜提示并终止程序。关键修改点在TimerPrinter的actionPerformed方法中,添加匹配判断逻辑。

修改后的完整代码
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import java.util.Random;
import java.util.Scanner;

public class Pega4Test {
    public static void main(String[] args){
        TalkingClock lottery= new TalkingClock(1000, true);
        lottery.ask();
        Date now = new Date();
        System.out.println(now);
        lottery.start();

        JOptionPane.showMessageDialog(null, "Quit Inner class program!");
        // 保留该判断,处理用户主动关闭弹窗时的情况
        if(lottery.getUserEntry()==lottery.getResult()){
            lottery.stop();
            System.out.println("You Won!!!!");
            System.exit(0);
        }

        System.out.println("You Lost!");
        System.exit(0);

    }

    static class TalkingClock {
        private int interval;
        private boolean beep;
        private Timer timer;
        private int userEntry;
        private int counter = 1;
        private int result;

        public TalkingClock(int interval, boolean beep) {
            this.interval = interval;
            this.beep = beep;

        }

        public int getUserEntry() {
            return userEntry;
        }

        public void setUserEntry(int userEntry) {
            this.userEntry = userEntry;
        }

        public int getResult() {
            return result;
        }

        public void setResult(int result) {
            this.result = result;
        }

        public void start() {
            ActionListener listener = new TimerPrinter();
            timer = new Timer(interval, listener);
            timer.start();
        }

        public void stop(){
            beep=false;
            timer.stop();
        }


        public void ask() {
            Scanner input = new Scanner(System.in);
            System.out.println("Enter desired number: ");
            userEntry = input.nextInt();
        }

        public int  getRandomNumber() {
            Random randomNum = new Random();
            result= randomNum.nextInt(5);
            return result;
        }

        public class TimerPrinter implements ActionListener {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("Print Run #" + counter + ": " + getRandomNumber());
                // 新增匹配判断逻辑,实时检查是否中奖
                if (result == userEntry) {
                    stop();
                    System.out.println("You Won!!!!");
                    System.exit(0);
                }
                if (beep) {
                    Toolkit.getDefaultToolkit().beep();
                    counter++;
                }
            }
        }
    }
}
关键修改说明
  • 在TimerPrinter的actionPerformed方法中,每次生成随机数后立刻检查result与userEntry是否匹配
  • 一旦匹配,调用stop()停止计时器,输出获胜提示并通过System.exit(0)终止程序,避免后续执行到You Lost!的逻辑

内容的提问来源于stack exchange,提问作者Anthony Alvarez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 13:30:41