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

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

目录

Plug:程序实现

方法一(记事本)

方法二(IDEA)

实验一:算术测试

一、实验目的

二、实验要求

三、程序代码

四、实验结果


Plug:程序实现

方法一(记事本)

  1. 新建一个记事本
  2. 输入代码
  3. 另存文件
  4. 更改文件名,名字为public class后的名字+.java(Hello.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

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() {
            @Override
            public 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() {
            @Override
            public 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

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); // 除数不为0
        int 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

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

四、实验结果


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

相关推荐
NiNg_1_234几秒前
Python的sklearn中的RandomForestRegressor使用详解
开发语言·python·sklearn
大卫小东(Sheldon)2 分钟前
Java的HTTP接口测试框架Gatling
java
谢家小布柔4 分钟前
java中的继承
java·开发语言
黑色叉腰丶大魔王5 分钟前
《基于 Python 的网页爬虫详细教程》
开发语言·爬虫·python
爱吃西瓜的小菜鸡6 分钟前
【C语言】矩阵乘法
c语言·学习·算法
l1384942745110 分钟前
Java每日一题(2)
java·开发语言·游戏
苹果醋313 分钟前
SpringBoot快速入门
java·运维·spring boot·mysql·nginx
晓纪同学17 分钟前
QT创建一个模板槽和信号刷新UI
开发语言·qt·ui
WANGWUSAN6624 分钟前
Python高频写法总结!
java·linux·开发语言·数据库·经验分享·python·编程
Yvemil724 分钟前
《开启微服务之旅:Spring Boot 从入门到实践》(一)
java