news 2026/7/2 1:39:14

匿名内部类和实验四

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
匿名内部类和实验四

public class AnonyDemo {
public static void main(String}`@TOC

实验四

Java Swing 小学生算术练习

  1. 难度选择(简单整数/中等小数/进阶分数)
  2. 随机四则运算题目(+ - * /)
  3. 输入答案点击确认/回车按键校验对错
  4. 实时统计正确/错误数量
  5. 界面布局美观,Swing事件处理完整
importjavax.swing.*;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.util.Random;publicclassMathPracticeextendsJFrame{// 界面组件privateJRadioButtoneasyRBtn,midRBtn,hardRBtn;privateJLabelquestionLabel;privateJTextFieldanswerInput;privateJButtonconfirmBtn,nextBtn;privateJLabelresultTipLabel;privateJLabelcountLabel;// 题目数据privatedoublenum1,num2;privatecharop;privateintrightCount=0;privateintwrongCount=0;privateRandomrandom=newRandom();publicMathPractice(){// 窗口基础设置setTitle("小学生算术练习软件");setSize(450,320);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setLocationRelativeTo(null);setLayout(newBorderLayout(10,10));setResizable(false);// 1. 难度选择面板JPaneldiffPanel=newJPanel();diffPanel.setLayout(newFlowLayout(FlowLayout.CENTER,15,5));diffPanel.setBorder(BorderFactory.createTitledBorder("选择难度"));easyRBtn=newJRadioButton("简单(整数)",true);midRBtn=newJRadioButton("中等(小数)");hardRBtn=newJRadioButton("进阶(分数)");ButtonGroupgroup=newButtonGroup();group.add(easyRBtn);group.add(midRBtn);group.add(hardRBtn);diffPanel.add(easyRBtn);diffPanel.add(midRBtn);diffPanel.add(hardRBtn);// 2. 题目展示面板JPanelqPanel=newJPanel();qPanel.setLayout(newFlowLayout(FlowLayout.CENTER,10,10));questionLabel=newJLabel("点击下一题生成题目",JLabel.CENTER);questionLabel.setFont(newFont("黑体",Font.BOLD,24));questionLabel.setPreferredSize(newDimension(400,40));qPanel.add(questionLabel);// 3. 答案输入面板JPanelinputPanel=newJPanel();inputPanel.setLayout(newFlowLayout(FlowLayout.CENTER,10,5));JLabeltip=newJLabel("你的答案:");tip.setFont(newFont("宋体",Font.PLAIN,16));answerInput=newJTextField(12);answerInput.setFont(newFont("宋体",Font.PLAIN,16));// 回车触发确认答案answerInput.addActionListener(newConfirmListener());confirmBtn=newJButton("确认答案");confirmBtn.addActionListener(newConfirmListener());nextBtn=newJButton("下一题");nextBtn.addActionListener(newNextQuestionListener());inputPanel.add(tip);inputPanel.add(answerInput);inputPanel.add(confirmBtn);inputPanel.add(nextBtn);// 4. 提示与统计面板JPanelbottomPanel=newJPanel();bottomPanel.setLayout(newGridLayout(2,1,5,5));resultTipLabel=newJLabel("请生成题目开始练习",JLabel.CENTER);resultTipLabel.setFont(newFont("宋体",Font.BOLD,16));countLabel=newJLabel("正确:0 道 | 错误:0 道",JLabel.CENTER);bottomPanel.add(resultTipLabel);bottomPanel.add(countLabel);// 组装所有面板add(diffPanel,BorderLayout.NORTH);add(qPanel,BorderLayout.CENTER);add(inputPanel,BorderLayout.SOUTH);add(bottomPanel,BorderLayout.PAGE_END);// 边距留白getContentPane().setBorder(BorderFactory.createEmptyBorder(10,10,10,10));}// 生成随机四则运算题目privatevoidcreateQuestion(){char[]ops={'+','-','*','/'};op=ops[random.nextInt(4)];// 根据难度生成数字if(easyRBtn.isSelected()){// 简单:1~20整数num1=random.nextInt(20)+1;num2=random.nextInt(20)+1;// 除法避免小数,保证整除if(op=='/'){num2=random.nextInt(10)+1;num1=num2*(random.nextInt(10)+1);}}elseif(midRBtn.isSelected()){// 中等:1位小数num1=Math.round((random.nextDouble()*20+1)*10)/10.0;num2=Math.round((random.nextDouble()*20+1)*10)/10.0;if(op=='/'){num2=Math.round((random.nextDouble()*10+1)*10)/10.0;num1=num2*(random.nextInt(10)+1);}}else{// 进阶:模拟分数展示,用小数计算num1=random.nextInt(10)+1;num2=random.nextInt(9)+1;if(op=='/'){num1=num2*(random.nextInt(8)+1);}}// 更新题目显示questionLabel.setText(num1+" "+op+" "+num2+" = ?");answerInput.setText("");resultTipLabel.setText("请输入答案后确认");}// 计算标准答案privatedoublegetStandardAnswer(){returnswitch(op){case'+'->num1+num2;case'-'->num1-num2;case'*'->num1*num2;case'/'->num1/num2;default->0;};}// 确认答案按钮/回车事件监听器classConfirmListenerimplementsActionListener{@OverridepublicvoidactionPerformed(ActionEvente){StringinputStr=answerInput.getText().trim();if(inputStr.isEmpty()){resultTipLabel.setText("⚠️ 请输入答案!");resultTipLabel.setForeground(Color.RED);return;}doubleuserAns;try{userAns=Double.parseDouble(inputStr);}catch(NumberFormatExceptionex){resultTipLabel.setText("⚠️ 输入格式错误,请输入数字!");resultTipLabel.setForeground(Color.RED);return;}doublestdAns=getStandardAnswer();// 浮点误差兼容,差值小于0.01判定正确if(Math.abs(userAns-stdAns)<0.01){rightCount++;resultTipLabel.setText("✅ 回答正确!太棒了");resultTipLabel.setForeground(newColor(0,150,0));}else{wrongCount++;resultTipLabel.setText("❌ 回答错误,正确答案:"+stdAns);resultTipLabel.setForeground(Color.RED);}// 更新统计countLabel.setText("正确:"+rightCount+" 道 | 错误:"+wrongCount+" 道");}}// 下一题按钮监听器classNextQuestionListenerimplementsActionListener{@OverridepublicvoidactionPerformed(ActionEvente){createQuestion();resultTipLabel.setForeground(Color.BLACK);}}publicstaticvoidmain(String[]args){// Swing程序建议在UI线程启动SwingUtilities.invokeLater(()->{MathPracticeapp=newMathPractice();app.setVisible(true);});}}

一、实验对应知识点说明

  1. Swing核心GUI类
  • JFrame:主窗口容器
  • JPanel:面板容器,布局管理
  • JLabel:文本标签(题目、提示、统计)
  • JTextField:单行输入框(填写答案)
  • JButton:按钮组件
  • JRadioButton/ButtonGroup:单选难度选择
  • 布局管理器:BorderLayoutFlowLayoutGridLayout
  1. 事件处理三要素
  2. 事件源:按钮JButton、输入框JTextField
  3. 监听器接口ActionListener
  4. 事件处理:实现actionPerformed()方法,匿名内部类/内部类完成回调
  • 扩展功能:输入框回车直接校验答案,复用同一监听器
  1. 题目功能实现
  • 四则运算:+ - * /随机抽取
  • 难度分层:整数/小数/分数三类随机数生成
  • 容错处理:除法保证整除、浮点计算误差兼容、非法输入捕获
  • 数据统计:记录正确/错误题目数量

二、运行操作步骤

  1. 新建文本文档,复制全部代码粘贴
  2. 修改文件后缀为MathPractice.java
  3. 使用javac编译、java运行,或直接在IDEA/Eclipse打开运行
  4. 操作流程:
    1. 选择难度等级
    2. 点击【下一题】生成随机算术题
    3. 在输入框填写答案,点击【确认答案】或直接按回车键校验
    4. 界面实时提示对错,并更新答题统计
    5. 重复点击下一题持续练习

三、实验拓展说明

  1. 操作数扩展:代码已支持整数、小数,进阶模式可自行修改生成分数字符串展示
  2. 运算符扩展:修改ops数组,新增%取模运算
  3. 难度扩展:新增高难度单选框,扩大随机数范围、增加多步运算
  4. 界面扩展:增加清空统计、计时、错题本功能按钮
  5. 交互扩展:添加弹窗提示、答题音效、分数评级

##核心要点

  1. Swing使用容器+组件分层搭建GUI界面,通过布局管理器规范控件排版
  2. Java事件模型:组件绑定监听器,触发动作时执行重写的事件处理方法
  3. 匿名内部类/内部类实现监听器,简化回调代码,适配GUI交互场景
  4. 随机数、浮点运算、异常捕获完成算术题库逻辑,实现小学生练习需求
  5. setAccessiblesetFontsetForeground等方法修改组件外观属性,优化界面美观度
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/2 1:34:27

机器人项目方案前置评审清单:定方案前先问清 5 个问题

机器人项目早期很容易直接进入方案讨论&#xff1a;电机、传感器、控制器、算力平台、机械结构、算法路线。 这些内容当然重要&#xff0c;但如果场景、任务、接口、风险和变更边界没有先定义清楚&#xff0c;后续很容易出现需求漂移、接口扯皮、联调返工和验证闭环不清。这份清…

作者头像 李华
网站建设 2026/7/2 1:34:08

Vatee:用标准方式看多语言支持,更容易形成稳定判断

在外汇行业语境里&#xff0c;表达越清晰、信息越透明&#xff0c;越容易建立稳定预期。在Vatee的外汇服务中&#xff0c;从公开信息与使用体验出发&#xff0c;梳理其更值得肯定的能力点与细节表现。外汇相关信息更新频繁&#xff0c;平台将关键提示与解释呈现得更清晰&#x…

作者头像 李华
网站建设 2026/7/2 1:31:11

新手小白如何购买阿里云服务器(新版详细教程)

阿里云官网 首先&#xff0c;打开阿里云官网&#xff0c;在首页找到"立即购买"按钮并点击&#xff0c;即可进入云服务器ECS的购买页面。 进入购买页面后可以看到&#xff0c;左边的"快速购买"里只有突发性能实例t5型&#xff0c;规格选择比较少&#xff0c…

作者头像 李华