如何在随机数与用户输入相同时停止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
相关产品推荐
相关产品推荐

