实验要求

编写一个算术测试的小软件,用来训练小学生的算术能力。程序由3个类组成,其中Teacher对象充当监视器,负责给出算术题目,并判断回答者的答案是否正确,ComputerFrame对象负责为算术题目提供视图,比如用户可以通过对象ComputerFrame对象提供的GUI界面看到题目,并通过该GUI界面给出题目的答案,MainClass是软件主类。

代码加注释

MainClass.java

public class MainClass {public static void main(String[] args) {ComputerFrame frame;frame=new ComputerFrame();frame.setTitle("算数测试");//设置窗口的名称(菜单条名称)frame.setBounds(100,100,650,180);//设置窗口的位置大小}
}

ComputerFrame.java

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class ComputerFrame extends JFrame {JMenuBar menubar;//创建菜单条JMenu choiceGrade;//创建菜单 一级菜单 选择等级 (等级1,等级2)JMenuItem grade1,grade2;//创建菜单项 二级菜单JTextField textOne,textTwo,textResult;//创建3个文本框 数1 + 数二 = 结果 三个文本框JButton getProblem,giveAnswer;//创建2个按钮(获取题目(随机获取) 确认答案)JLabel operatorLabel,message;//创建标签设置操作符+/-Teacher teacherzhang;//声明teacher对象 声明自制的监视器ComputerFrame(){teacherzhang =new Teacher();//为监视器分配变量teacherzhang.setMaxInteger(20);//设置随机出现的最大数setLayout(new FlowLayout());//设置布局类为FlowLayout型(创建一个居中对齐的布局对象)menubar = new JMenuBar();//为菜单条分配变量choiceGrade = new JMenu("选择级别");//为一级菜单分配变量并命名grade1 = new JMenuItem("幼儿级别");//二级菜单 等级1grade2 = new JMenuItem("儿童级别");//二级菜单 等级二grade1.addActionListener(new ActionListener() {//给等级1增加监视器,设置随机产生的最大数为10,点击触发public void actionPerformed(ActionEvent e) {teacherzhang.setMaxInteger(10);}});grade2.addActionListener(new ActionListener() {//给等级二增加监视器,设置随机产生的最大数为50,点击触发public void actionPerformed(ActionEvent e) {teacherzhang.setMaxInteger(50);}});choiceGrade.add(grade1);//将二级菜单等级1装入一级菜单 choiceGrade里(这里具体指将“幼儿级别”菜单项添加到“选择级别”菜单里)choiceGrade.add(grade2);//将二级菜单等级2装入一级菜单 choiceGrade里(这里具体指将“儿童级别”菜单项添加到“选择级别”菜单里)menubar.add(choiceGrade);//将一级菜单装入菜单条menubar里(这里具体指将“选择级别”菜单添加到“算数测试”菜单条里)setJMenuBar(menubar);//将菜单条添加到JFrame中textOne = new JTextField(5);//创建文本框textOne(数字1),长度为5textTwo = new JTextField(5);//创建文本框textTwo(数字二),长度为5textResult = new JTextField(5);//创建文本框textResult(结果),长度为5operatorLabel = new JLabel("+");//创建标签operatorLabel(运算符),设置为加号operatorLabel.setFont(new Font("Arial", Font.BOLD, 20));//设置标签颜色大小message = new JLabel("你还没有回答");//创建提示文本框getProblem = new JButton("获取题目");//创建获取题目按钮giveAnswer = new JButton("确认答案");//创建确认答案按钮add(textOne);//将textOne文本框装入窗口                        数1add(operatorLabel);//将operatorLabel标签装入窗口              +add(textTwo);//将textTwo文本框装入窗口                        数二add(new JLabel("="));//新建标签设置为“=”号,装入窗口       =add(textResult);//将textResult文本框装入窗口                  结果add(giveAnswer);//将确认答案按钮加入窗口                       确认答案add(message);//将提示标签加入窗口                             提示add(getProblem);//将获取题目按钮加入窗口                       获取题目textResult.requestFocus();//设置为有输入的焦点textOne.setEditable(false);//将textOne文本框设置为不可编辑textTwo.setEditable(false);//将textTwo文本框设置为不可编辑getProblem.setActionCommand("getProblem");//设置按钮getProblem的触发属性字符为"getProblem"textResult.setActionCommand("answer");//设置文本框giveAnswer的触发属性字符为"answer"giveAnswer.setActionCommand("answer");//设置按钮(JButton)giveAnswer的触发属性字符为"answer"teacherzhang.setJTextField(textOne, textTwo, textResult);//将textOne,textTwo,textResult三个文本框传入teacherZhang中teacherzhang.setJLabel(operatorLabel, message);//将operatorLabel, message两个标签传入teacherZhang中getProblem.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {teacherzhang.actionPerformed(e);}});//将teacherZhang注册为getProblem按钮的事件监视器giveAnswer.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {teacherzhang.actionPerformed(e);}});//将teacherZhang注册为giveAnswer按钮的事件监视器textResult.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {teacherzhang.actionPerformed(e);}});//将teacherZhang注册为textResult文本框的事件监视器setVisible(true);//设置可见性validate();setDefaultCloseOperation(DISPOSE_ON_CLOSE);//设置默认关闭操作 隐藏窗口后 释放资源}}

Teacher.java

import java.awt.*;
import java.awt.event.*;
import java.util.Random;import javax.swing.*;public class Teacher implements ActionListener{//创建一个监视器 继承接口监视器监控int numberOne, numberTwo;//储存获取的textOne和textTwo的值String operator = "";//储存运算符boolean isRight;//Random random;//产生随机数int maxInteger;//储存最大数JTextField textOne, textTwo, textResult;//创建文本框用来接收ComputerFrame传来的三个文本框 数1 数2 结果JLabel operatorLabel, message;//创建标签用来接收ComputerFrame传来的两个标签,运算符和提示Teacher() {random = new Random();//产生随机类,生成随机数}public void setMaxInteger(int n) {//设置最大整数maxInteger = n;}public void actionPerformed(ActionEvent e) {//重写 ActionListener接口继承的方法String str = e.getActionCommand();//获得e的触发字符串if (str.equals("getProblem")) {//如果获得的为获取题目的字符串numberOne = random.nextInt(maxInteger) + 1;//随机获得一个数储存到numberOnenumberTwo = random.nextInt(maxInteger) + 1;//随机获得一个数储存到numberTwodouble d = Math.random();if (d >= 0.5)operator = "+";elseoperator = "-";//将操作符随机为加 减textOne.setText("" + numberOne);//将数1传到textOne文本框中textTwo.setText("" + numberTwo);//将数2传到textTwo文本框中operatorLabel.setText(operator);//将操作符传到文本框中message.setText("请回答");//设置提示为请回答textResult.setText(null);//结果为空} else if (str.equals("answer")) {//如果获取的为确认答案的字符串String answer = textResult.getText();//将结果文本框里的字符存储到answer中try {int result = Integer.parseInt(answer);//将字符串转换为int型if (operator.equals("+")) {//+操作时if (result == numberOne + numberTwo)//运算正确message.setText("你的回答正确");//修改设置提示标签elsemessage.setText("你的回答错误");//答案错误} else if (operator.equals("-")) {//-操作if (result == numberOne - numberTwo)message.setText("你的回答正确");elsemessage.setText("你的回答错误");}} catch (NumberFormatException ex) {//捕捉结果输入有误时 提示请输入数字字符message.setText("请输入数字字符");}}}public void setJTextField(JTextField... t) {//负责接收三个文本框的方法textOne = t[0];textTwo = t[1];textResult = t[2];}public void setJLabel(JLabel... label) {//负责接收两个提示的方法operatorLabel = label[0];message = label[1];}
}

运算结果:

无输入
结果正确
结果错误

Java 11.8 上机实验 算数测试 (Java程序设计精编教程 第三版)相关推荐

  1. Java 11:JOIN表,获取Java流

    是否曾经想过如何将联接的数据库表转换为Java Stream? 阅读这篇简短的文章,并了解如何使用Speedment Stream ORM完成它. 我们将从Java 8示例开始,然后研究Java 11 ...

  2. 《Java程序设计与数据结构教程(第二版)》学习指导

    <Java程序设计与数据结构教程(第二版)>学习指导 目录 图书简况 学习指导 第一章 绪论 第二章 数据和表达式 第三章 使用类和对象 第四章 条件和循环 第五章 编写类 第六章 图形用 ...

  3. java编写程序上机实验,《Java程序设计》上机实验

    <<Java程序设计>上机实验>由会员分享,可在线阅读,更多相关<<Java程序设计>上机实验(19页珍藏版)>请在技术文库上搜索. 1.tor的安装及 ...

  4. Java语言程序设计 上机实验2 掌握Java的基本语言成分和流程控制语句。 掌握Java中数组的使用,理解引用数据类型。 掌握String类的使用。...

      Java语言程序设计 上机实验2 实验目的: 掌握Java的基本语言成分和流程控制语句. 掌握Java中数组的使用,理解引用数据类型. 掌握String类的使用. 实验内容: 注:标(*)为选做内 ...

  5. java 密钥工厂 desede_20145212 实验五《Java网络编程》

    20145212 实验五<Java网络编程> 一.实验内容1.运行下载的TCP代码,结对进行,一人服务器,一人客户端: 2.利用加解密代码包,编译运行代码,一人加密,一人解密: 3.集成代 ...

  6. 实验一java开发环境_2018-2019-2-20175225 实验一 《Java开发环境的熟悉》实验报告

    2018-2019-2-20175225 实验一 <Java开发环境的熟悉>实验报告 2018-2019-2-20175225 实验一 <Java开发环境的熟悉>实验报告 20 ...

  7. Java 17 采用率增长 430%、Java 11 稳居第一,最新 Java 编程语言报告来了!

    编译 | 苏宓 出品 | CSDN(ID:CSDNnews) 1995 年,Sun Microsystem 公司发布了 Java 程序设计语言,为开发现代多媒体应用程序提供了一种更加可移植和交互的方式 ...

  8. 涵盖从Java 5到Java 11所有重要特性,让Java学习不再难!

    曾经,网络上流传着这样一套视频,无数学员通过这套视频学会了Java,进入了软件开发领域~~ 这套视频就是"Java无难事". 如今,为了方便大家更好地学习,也跟上当前Java发展更 ...

  9. java语言程序设计精编_全国精编月高等教育自学考试Java语言程序设计一试题

    <全国精编月高等教育自学考试Java语言程序设计一试题>由会员分享,可在线阅读,更多相关<全国精编月高等教育自学考试Java语言程序设计一试题(12页珍藏版)>请在人人文库网上 ...

最新文章

  1. 尝鲜RHEV 3.0——概念篇(附RHEV3.0下载)
  2. python自动化_Python报表自动化
  3. zookeeper系列(九)zookeeper的会话详解
  4. vue - blog开发学习5
  5. 上传文件按钮美化,上传文件前后状态控制
  6. java编译sql存过_SQL SERVER 临时表导致存储过程重编译(recompile)的一些探讨
  7. 电脑怎么进入linux系统,Linux操作系统进入家用电脑成为发展新前景
  8. 怎么快速了解自己的MySQL服务器
  9. 常用正则表达式(不断更新ing...)
  10. 计算机抛硬币模拟器,GitHub - Jameszyq/tossCoin: 抛硬币,微信小程序
  11. 模糊自适应整定PID控制
  12. Ito‘s lemma伊藤引理
  13. PKI密码学学习笔记
  14. SylixOS网卡驱动实现篇
  15. android分享微信获取资源失败怎么办,Android处理使用Intent分享图片,以及在微信7.0版本出现“获取资源失败,无法分享到朋友圈”,导致分享失败的问题...
  16. mysql表字段一定要写英文吗_关于数据库列名是否必须是英文的?
  17. 数字接龙 用计算机完成318,微信报名接龙数字如何排列对齐传递
  18. 在鹅厂工作的广西表妹教我用Python生成会跳舞的美女~
  19. JAVA初级工程师面试36问(一)
  20. 微信小程序——获取用户unionId

热门文章

  1. 深圳 社会医疗保险现金医疗费报销
  2. 50款免费 PSD 名片设计模板源文件下载《下篇》
  3. 有幸被评为微软全球最有价值专家(MVP)
  4. DefaultTableModel
  5. 用flex布局实现图片轮播
  6. Gradle For Android系列4:创建Build Variants
  7. JAVA计算机毕业设计中国古诗词学习平台Mybatis+源码+数据库+lw文档+系统+调试部署
  8. 采坑道路2:H5页面,部分IOS机型的 <img>标签显示不出
  9. Mozilla广告过滤软件
  10. python开发程序知道微信好友是否已读信息吗_python查看微信好友是否删除自己