Java 上机实践11(组件及事件处理)

(大家好,今天分享的是Java的相关知识,大家可以在评论区进行互动答疑哦~加油!💕)

目录

Plug:程序实现

方法一(记事本)

方法二(IDEA)

实验一:算术测试

一、实验目的

二、实验要求

三、程序代码

  四、实验结果


Plug:程序实现

方法一(记事本)

  1. 新建一个记事本
  2. 输入代码
  3. 另存文件
  4. 更改文件名,名字为public class后的名字+.javaHello.java
  5. 更改保存类型,选择所有文件
  6. 选择编码格式,一般选择ANSI UTF-8(在编译时需加上固定格式-encoding utf-8)(这里我们选择UTF-8)

方法二(IDEA)

  1. 新建java文件
  2. 输入代码
  3. 编译运行

(相较简便一些)

实验一:算术测试

一、实验目的

本实验的目的是让学生学习处理ActionEvent事件。

二、实验要求

编写一个算术测试小软件,用来训练小学生的算术能力。程序由3个类组成,其中Teacher类对象负责给出算术题目,并判断回答者的答案是否正确:ComputerFrame类对象提供的GUI界面看到题目并通过该GUI界面给出题目的答案;MailClass是主类。)。

三、程序代码

ComputerFrame.java

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class ComputerFrame extends JFrame {private Teacher teacher;private JTextField num1Field;private JTextField operatorField;private JTextField num2Field;private JTextField answerField;private JLabel resultLabel;private String[] currentQuestion; // 保存当前题目的数组public ComputerFrame(Teacher teacher) {this.teacher = teacher;setTitle("算术训练");setSize(500, 150);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setLocationRelativeTo(null);// 设置布局setLayout(new FlowLayout());// 显示题目框num1Field = new JTextField(5);num1Field.setEditable(false);add(num1Field);operatorField = new JTextField(2);operatorField.setEditable(false);add(operatorField);num2Field = new JTextField(5);num2Field.setEditable(false);add(num2Field);// 用户输入答案框answerField = new JTextField(10);add(answerField);// 获取题目按钮JButton getQuestionButton = new JButton("获取题目");getQuestionButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {currentQuestion = getRandomQuestion();num1Field.setText(currentQuestion[0]);operatorField.setText(currentQuestion[1]);num2Field.setText(currentQuestion[2]);resultLabel.setText(""); // 清空结果}});add(getQuestionButton);// 确认答案按钮JButton checkAnswerButton = new JButton("确认答案");checkAnswerButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {String userAnswer = answerField.getText();boolean isCorrect = teacher.checkAnswer(currentQuestion, userAnswer);if (isCorrect) {resultLabel.setText("你回答正确");} else if (userAnswer.isEmpty() || !userAnswer.matches("-?\\d+")) {resultLabel.setText("请输入数字字符");} else {resultLabel.setText("你回答错误");}}});add(checkAnswerButton);// 结果显示框resultLabel = new JLabel("");add(resultLabel);setVisible(true);}private String[] getRandomQuestion() {// 根据简单模式或困难模式随机选择int mode = JOptionPane.showOptionDialog(this, "请选择模式", "模式选择", JOptionPane.DEFAULT_OPTION,JOptionPane.INFORMATION_MESSAGE, null, new String[]{"简单模式", "困难模式"}, "简单模式");if (mode == 0) {return teacher.generateSimpleQuestion();  // 简单模式} else {return teacher.generateDifficultQuestion();  // 困难模式}}
}

Teacher.java 

import java.util.Random;public class Teacher {private Random random;public Teacher() {random = new Random();}// 生成简单模式的加减题目public String[] generateSimpleQuestion() {int num1 = random.nextInt(100);int num2 = random.nextInt(100);String operator = random.nextBoolean() ? "+" : "-";return new String[]{String.valueOf(num1), operator, String.valueOf(num2)};}// 生成困难模式的乘除题目public String[] generateDifficultQuestion() {int num1 = random.nextInt(1, 100); // 除数不为0int num2 = random.nextInt(1, 100);String operator = random.nextBoolean() ? "*" : "/";return new String[]{String.valueOf(num1), operator, String.valueOf(num2)};}// 判断答案是否正确public boolean checkAnswer(String[] question, String answer) {int num1 = Integer.parseInt(question[0]);String operator = question[1];int num2 = Integer.parseInt(question[2]);int correctAnswer = 0;switch (operator) {case "+":correctAnswer = num1 + num2;break;case "-":correctAnswer = num1 - num2;break;case "*":correctAnswer = num1 * num2;break;case "/":correctAnswer = num1 / num2;break;}try {int userAnswer = Integer.parseInt(answer);return userAnswer == correctAnswer;} catch (NumberFormatException e) {return false; // 输入的不是数字}}
}

MainClass.java

public class MainClass {public static void main(String[] args) {Teacher teacher = new Teacher();  // 创建老师对象new ComputerFrame(teacher);       // 创建并显示GUI界面}
}

  四、实验结果


(今日分享暂时到此为止啦!为不断努力的自己鼓鼓掌吧🥳。今日文案分享:所有失去的,会以另一种方式归来。)  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/890385.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UVM 验证方法学之interface学习系列文章(十一)virtual interface 再续篇

一 前言 并非总是可以将被测单元(DUT)视为一个黑盒,即仅监控和驱动DUT的顶层端口信号。这一点在从模块级测试转向更大规模的系统级测试时尤为明显。有时,我们需要了解实现细节以便访问DUT内部的信号。这被称为白盒验证。 Verilog一直提供从其他作用域访问几乎任何层次结构…

本地如何启动casdoor

1、下载代码 GitHub - casdoor/casdoor at v1.777.0 下载对应tag的代码,我这里选择的时v1.777.0版本 通过网盘分享的文件:casdoor-1.777.0.zip 链接: https://pan.baidu.com/s/1fPNqyJYeyfZnem_LtEc0hw 提取码: avpd 2、启动后端 1、使用goland编译…

CSDN外链失效3:

参考我之前的博客: 外链失效博客1:随想笔记1:CSDN写博客经常崩溃,遇到外链图片转存失败怎么办_csdn外链图片转存失败-CSDN博客 外链失效博客2:网络随想2:转语雀_md格式转语雀lake格式-CSDN博客 markdown…

Kubernates

kubernates是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。 架构…

Pycharm 更改字体大小

更改代码字体的大小 更改软件字体的大小

Ubuntu20.04解决docker安装后is the docker daemon running? 问题

Ubuntu20.04解决docker安装后is the docker daemon running? 问题 问题描述问题分析问题解决 问题描述 docker info后报错 ERROR: Cannot connect to the Docker daemon at unix:///root/.docker/desktop/docker.sock. Is the docker daemon running? errors pretty printi…

STM32完全学习——CRC校验

一、STM32F407CRC校验的补充 由于STM32F407的CRC校验,并没有什么配置的选项,就会导致他只能进行32位,且初始值是0XFFFFFFFF,输入和输出都没有反转的CRC校验。为了弥补这些不足点,于是自己编写函数来增加这些功能 //输…

CSS系列(27)- 图形与滤镜详解

前端技术探索系列:CSS 图形与滤镜详解 🎨 致读者:探索CSS的艺术表现力 👋 前端开发者们, 今天我们将深入探讨 CSS 图形和滤镜效果,学习如何创建引人注目的视觉效果。 基础图形 🚀 几何形状…

四、使用langchain搭建RAG:金融问答机器人--构建web应用,问答链,带记忆功能

经过前面3节完成金融问答机器人基本流程,这章将使用Gradio构建web应用,同时加入memory令提示模板带有记忆的,使用LCEL构建问答链。 加载向量数据库 from langchain.vectorstores import Chroma from langchain_huggingface import HuggingF…

矩阵链乘法【东北大学oj数据结构10-2】C++

矩阵链乘法问题的目标是找到最有效的方法来乘以给定的 n 个矩阵 M1,M2,M3,...,Mn。 编写一个程序,读取 Mi 的维度,并找到最小标量乘法以计算最大链链乘法 M1M2...Mn。 输入 在第一行中,给出了一个整数 n。 在接下来的 n 行中,矩阵…

深度学习之超分辨率算法——SRCNN

网络为基础卷积层 tensorflow 1.14 scipy 1.2.1 numpy 1.16 大概意思就是针对数据,我们先把图片按缩小因子照整数倍进行缩减为小图片,再针对小图片进行插值算法,获得还原后的低分辨率的图片作为标签。 main.py 配置文件 from model im…

基于海思soc的智能产品开发(mcu读保护的设置)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 对于市场上的产品,除了电路之外,软件保护也是非常重要的一个环节。要是自己辛辛苦苦写的软件,被竞争对手轻易地…

Zabbix6.0升级为6.4

为了体验一些新的功能,比如 Webhook 和问题抑制等,升级个小版本。 一、环境信息 1. 版本要求 一定要事先查看官方文档,确认组件要求的版本,否则版本过高或者过低都会出现问题。 2. 升级前后信息 环境升级前升级后操作系统CentOS…

GitLab的卸载与重装

目录 一、GitLab的卸载 二、 GitLab的安装与配置 1. 创建安装目录 2. 安装 3. 使用 3.1 初始化 3.2 创建空白项目 ​编辑 3.3 配置SSH 3.3.1 配置公钥 ​编辑 3.3.2 配置私钥 3.4 配置本地git库 一、GitLab的卸载 1. 停止gitlab sudo gitlab-ctl stop 2. 卸载…

0基础学java之Day29(单例模式、死锁)

单例模式 理解:在整个项目中,该类的实例只能有一个 1.饿汉式 优点:线程安全 缺点:浪费资源 public class A { ​private static A a new A();private A(){}public static A getInstance(){return a;}public static void met…

PyCharm 中打印完整的 DataFrame

PyCharm 中打印完整的 DataFrame 方法 1:设置 pandas 的全局显示选项代码示例:解释: 方法 2:临时设置显示选项代码示例:解释: 方法 3:使用 to_string 方法代码示例:解释:…

Linux快速入门-Linux的常用命令

Linux的常用命令 1. Linux的终端与工作区1.1 终端概述1.2 切换终端 2. Shell语言解释器2.1 Shell概述 3. 用户登录与身份切换3.1 su 命令3.2 sudo 命令 4. 文件、目录操作命令4.1 pwd 命令4.2 cd 命令4.3 ls 命令4.3.1 ls 指令叠加使用 4.4 mkdir 命令4.5 rmdir 命令4.6 cp 命令…

内表中的 GROUP BY 详解

由于大家对语法及其含义似乎有些混淆,让我们用一个非常简单的例子来逐步处理内部表的分组问题,你会发现其实并不复杂。我还附上了一个程序的全文,该程序会执行以下步骤并产生一些输出结果。 是的,您有一个内部表 spfli_tab TYPE …

三、ubuntu18.04安装docker

1.使用默认ubuntu存储库安装docker 更新软件存储库 更新本地软件数据库确保可以访问最新版本。打开终端输入:sudo apt-get update 卸载旧版本的docker 建议继续之前卸载任何旧的docker软件。打开终端输入:sudo apt-get remove docker docker-engine …

【Linux系统编程】:信号(2)——信号的产生

1.前言 我们会讲解五种信号产生的方式: 通过终端按键产生信号,比如键盘上的CtrlC。kill命令。本质上是调用kill()调用函数接口产生信号硬件异常产生信号软件条件产生信号 前两种在前一篇文章中做了介绍,本文介绍下面三种. 2. 调用函数产生信号 2.1 k…