Java GUI按钮随机数匹配功能失效问题求助
问题原因及修复方案
核心问题
每次点击按钮时,你都会重新生成两个全新的随机数x和w,而不是拿当前点击生成的数和另一个按钮已经显示的数值做对比。比如:
- 点击按钮one时,生成的x用于更新one的文本,但w是本次点击新生成的随机数,和two当前显示的数值完全无关
- 点击按钮two时,生成的w用于更新two的文本,x又是新的随机数,和one当前显示的数值无关
这就导致判断x==w只是在比较本次点击生成的两个随机数,而非两个按钮上的实际数值,自然无法触发获奖提示。
修复步骤
- 移除每次点击时重复生成的无用随机数,只给当前点击的按钮生成一个随机数并更新文本。
- 点击按钮时,解析另一个按钮的文本内容转为整数,再和本次生成的随机数做对比。
修复后的代码示例
class Main extends JPanel implements ActionListener { JButton one; JButton two; JLabel magic; public void initFrame() { JFrame frm = new JFrame("GUI INTRO"); JPanel content = new JPanel(); frm.add(content); one = new JButton("0"); two = new JButton("0"); one.addActionListener(this); two.addActionListener(this); content.add(one); content.add(two); frm.setLayout(new FlowLayout()); frm.setSize(700,700); frm.setLocationRelativeTo(null); frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frm.setVisible(true); } public void actionPerformed(ActionEvent e) { if(e.getSource() == one) { int x = (int) (Math.random()*10+1); one.setText(Integer.toString(x)); System.out.print("one: " + x + " "); int twoNum = Integer.parseInt(two.getText()); if(x == twoNum) { System.out.println("You Win the Big Prize!"); } else { System.out.println(); } } else if (e.getSource() == two) { int w = (int) (Math.random()*10+1); two.setText(Integer.toString(w)); System.out.print("two: " + w + " "); int oneNum = Integer.parseInt(one.getText()); if(w == oneNum) { System.out.println("You Win the Big Prize!"); } else { System.out.println(); } } // 保留你无关的magic逻辑,此处省略 } public static void main(String[] args){ Main frame = new Main(); frame.initFrame(); } }
额外优化点
- 去掉了组件的
static修饰符:静态成员会导致组件实例全局共享,不符合面向对象设计规范,改为普通成员变量即可。 - 初始按钮文本设为"0":避免空文本解析整数时出现异常,也让界面初始状态更合理。
内容的提问来源于stack exchange,提问作者Caitlyn
相关产品推荐
相关产品推荐

