题目:
算法测试:编写算数测试小软件,三个类组成,Teacher类负责出题,并判断回答是否正确;ComputerFrame类负责提供视图,用户可通过此类GUI看到题目,并编写答案;MainClass是软件入口类。
思想:
1、Teacher类负责出题,因此需要三个属性int num1、int num2、String operator分别表示两个运算数以及一个运算符,保证出题随即性,运算数与运算符均为随机生成;并判断回答是否正确,因此编写函数boolean isRight(double result)用于判断用户输入的答案是否正确。
2、ComputerFrame类负责提供视图,用户可通过此类GUI看到题目,并编写答案,因此编写ComputerFrame类继承于JFrame类,属性为所需要的各个按钮、输入框、标签、用户输入的答案以及Teacher类对象。
3、MainClass是软件入口类,即生成ComputerFrame类对象并设置其属性。
源代码:
MainClass.java
package countTest;
import javax.swing.JFrame;
/**
* @author TX
* @time 2016年12月3日 上午10:30:03
*/
public class MainClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
ComputerFrame frame = new ComputerFrame("算术测试");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 120);
frame.setLocation(500, 200);
frame.setVisible(true);
}
}
Teacher.java
package countTest;
import java.util.Random;
/**
* @author TX
* @time 2016年12月3日 上午10:30:34
*/
public class Teacher {
private int num1;
private int num2;
private String operator;
public Teacher()
{
Random random = new Random();
num1 = random.nextInt(100);
num2 = random.nextInt(100);
int opNum = random.nextInt(4);
if(opNum == 0) operator = "+";
if(opNum == 1) operator = "-";
if(opNum == 2) operator = "*";
if(opNum == 3) operator = "/";
}
public boolean isRight(double result)
{
System.out.println(num1+ operator + num2 + "=" + result);
if(operator.equals("+"))
{
System.out.println(num1+num2);
return result == (num1+num2);
}
else if(operator.equals("-"))
{
System.out.println(num1-num2);
return result == (num1-num2);
}
else if(operator.equals("*"))
{
System.out.println(num1*num2);
return result == (num1*num2);
}
else if(operator.equals("/"))
{
System.out.println(((double)num1/(double)num2));
return Math.abs(result-(double)num1/(double)num2) < 0.001;
}
return false;
}
public int getNum1() {
return num1;
}
public void setNum1(int num1) {
this.num1 = num1;
}
public int getNum2() {
return num2;
}
public void setNum2(int num2) {
this.num2 = num2;
}
public String getOperator() {
return operator;
}
public void setOperator(String operator) {
this.operator = operator;
}
}
ComputerFrame.java
package countTest;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
/**
* @author TX
* @time 2016年12月3日 上午10:30:56
*/
public class ComputerFrame extends JFrame{
Teacher teacher;
JButton getQuestion, confirmAnswer;
JTextField text1, text2, text3;
JLabel label1, label2, checkLabel;
public int resultNum;
public ComputerFrame(String s){
super(s);
teacher = new Teacher();
setLayout(new FlowLayout());
text1 = new JTextField(6);
text1.setEditable(false);
text2 = new JTextField(6);
text2.setEditable(false);
text3 = new JTextField(6);
label1 = new JLabel("+");
label2 = new JLabel("=");
checkLabel = new JLabel();
getQuestion = new JButton("获取题目");
getQuestion.addActionListener(new ActionListener()
{public void actionPerformed(ActionEvent arg0) {
teacher = new Teacher();
label1.setText(teacher.getOperator());
text1.setText(String.valueOf(teacher.getNum1()));
text2.setText(String.valueOf(teacher.getNum2()));
}});
confirmAnswer = new JButton("确认答案");
confirmAnswer.addActionListener(new ActionListener()
{public void actionPerformed(ActionEvent arg0) {
if(text3.getText().length() == 0)
{
checkLabel.setText("请输入答案!");
}
else
{
double result = Double.valueOf(text3.getText());
if(teacher.isRight(result))
{
checkLabel.setText("回答正确!");
}
else
{
checkLabel.setText("回答错误!");
}
}
}});
label1.setText(teacher.getOperator());
text1.setText(Integer.toString(teacher.getNum1()));
text2.setText(Integer.toString(teacher.getNum2()));
this.add(getQuestion);
this.add(text1);
this.add(label1);
this.add(text2);
this.add(label2);
this.add(text3);
this.add(confirmAnswer);
this.add(checkLabel);
setVisible(true);
validate();
}
}