1、编写一个算术测试小软件,用来训练小学生的算术能力。软件界面如下图所示,点击“获取题目”的按钮,监视器负责给出算术题目显示在文本框和标签上。用户在第三个文本框输入答案,点击“确认答案”按钮,系统给出结果“回答正确”或者“回答错误”。请写出一个java代码
时间: 2023-06-01 19:07:46 浏览: 113
实现:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ArithmeticsTest extends JFrame implements ActionListener {
private JTextField num1Field, num2Field, answerField;
private JLabel operatorLabel, resultLabel;
private JButton generateButton, confirmButton;
public ArithmeticsTest() {
// 初始化界面
setTitle("算术测试");
setSize(300, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
Container contentPane = getContentPane();
contentPane.setLayout(new GridLayout(5, 2));
contentPane.add(new JLabel("数1:"));
num1Field = new JTextField(10);
num1Field.setEditable(false);
contentPane.add(num1Field);
operatorLabel = new JLabel();
operatorLabel.setHorizontalAlignment(SwingConstants.CENTER);
contentPane.add(operatorLabel);
contentPane.add(new JLabel("数2:"));
num2Field = new JTextField(10);
num2Field.setEditable(false);
contentPane.add(num2Field);
contentPane.add(new JLabel("答案:"));
answerField = new JTextField(10);
contentPane.add(answerField);
generateButton = new JButton("获取题目");
generateButton.addActionListener(this);
contentPane.add(generateButton);
confirmButton = new JButton("确认答案");
confirmButton.addActionListener(this);
confirmButton.setEnabled(false);
contentPane.add(confirmButton);
contentPane.add(new JLabel(""));
resultLabel = new JLabel("");
resultLabel.setHorizontalAlignment(SwingConstants.CENTER);
contentPane.add(resultLabel);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == generateButton) {
// 获取题目
int num1 = (int) (Math.random() * 100);
int num2 = (int) (Math.random() * 100);
int operator = (int) (Math.random() * 4); // 0-加法,1-减法,2-乘法,3-除法
switch (operator) {
case 0:
operatorLabel.setText("+");
num2 = (int) (Math.random() * (100 - num1));
break;
case 1:
operatorLabel.setText("-");
num2 = (int) (Math.random() * Math.min(num1, 100));
break;
case 2:
operatorLabel.setText("×");
num2 = (int) (Math.random() * Math.min(10, 100 / num1));
break;
case 3:
operatorLabel.setText("÷");
while (num2 == 0 || num1 % num2 != 0) {
num1 = (int) (Math.random() * 100);
num2 = (int) (Math.random() * Math.min(10, 100 / num1));
}
break;
}
num1Field.setText(String.valueOf(num1));
num2Field.setText(String.valueOf(num2));
answerField.setText("");
resultLabel.setText("");
confirmButton.setEnabled(true);
answerField.requestFocus();
} else if (e.getSource() == confirmButton) {
// 验证答案
try {
int num1 = Integer.parseInt(num1Field.getText());
int num2 = Integer.parseInt(num2Field.getText());
int result = 0;
switch (operatorLabel.getText()) {
case "+":
result = num1 + num2;
break;
case "-":
result = num1 - num2;
break;
case "×":
result = num1 * num2;
break;
case "÷":
result = num1 / num2;
}
int answer = Integer.parseInt(answerField.getText());
if (answer == result) {
resultLabel.setText("回答正确!");
} else {
resultLabel.setText("回答错误!");
}
} catch (NumberFormatException ex) {
JOptionPane.showMessageDialog(this, "请正确输入答案!");
}
confirmButton.setEnabled(false);
generateButton.requestFocus();
}
}
public static void main(String[] args) {
ArithmeticsTest arithmeticTest = new ArithmeticsTest();
arithmeticTest.setVisible(true);
}
}
注意:
1. 可以通过设置随机数的范围和条件来控制题目的难度;
2. 在允许用户输入答案时,需要对用户输入的字符串进行转换并对可能抛出的NumberFormatException进行处理。