题目:
算法测试:编写算数测试小软件,三个类组成,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(); } }