天天看點

算數測試(Java實驗)

題目描述:

編寫一個算術測試小軟體,用來訓練國小生的算術能力。

Teacher類對象充當螢幕,負責給出算術題目,并判斷回答者的答案是否正确。

package math;

import java.util.Random;
import java.awt.event.*;
import javax.swing.*;
public class Teacher implements ActionListener{
  int numberOne,numberTwo;
  String operator="";
  boolean isRight;
  Random random;
  int maxInteger;
  JTextField textOne,textTwo,textResult;
  JLabel operatorLabel,message;
  Teacher(){
    random = new Random();
  }
  public void setMaxInteger(int n){
    maxInteger=n;
  }
  public void actionPerformed(ActionEvent e){
    String str=e.getActionCommand();
    if(str.equals("getProblem")){
      numberOne=random.nextInt(maxInteger)+1;
      numberTwo=random.nextInt(maxInteger)+1;
      double d=Math.random();
      if(d>=0.5)
        operator="+";
      else
        operator="-";
      textOne.setText(""+numberOne);
      textTwo.setText(""+numberTwo);
      operatorLabel.setText(operator);
      message.setText("請回答");
      textResult.setText(null);
    }
    else if(str.equals("answer")){
      String answer = textResult.getText();
      try{ int result=Integer.parseInt(answer);
      if(operator.equals("+")){
        if(result==numberOne+numberTwo)
          message.setText("你回答正确");
        else
          message.setText("你回答錯誤");
      }
      else if(operator.equals("-")){
        if(result==numberOne-numberTwo)
          message.setText("你回答正确");
        else
          message.setText("你回答錯誤");
      }
    }
    catch(NumberFormatException ex){
      message.setText("請輸入數字字元");
    }
  }
}
  public void setJTextField(JTextField...t){
    textOne=t[0];
    textTwo=t[1];
    textResult=t[2];
  }
  public void setJLabel(JLabel...label){
    operatorLabel=label[0];
    message=label[1];
  }
}      

ComputerFrame對象負責為算術題目 提供視圖。

package math;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ComputerFrame extends JFrame {
JMenuBar menubar;
JMenu choiceGrade;
JMenuItem grade1,grade2;
JTextField textOne,textTwo,textResult;
JButton getProblem,giveAnswer;
JLabel operatorLabel,message;
Teacher teacherZhang;
ComputerFrame()
{
  teacherZhang=new Teacher();
  teacherZhang.setMaxInteger(20);
  setLayout(new FlowLayout());
  menubar=new JMenuBar();
  choiceGrade=new JMenu("選擇級别");
  grade1=new JMenuItem("幼兒級别");
  grade2=new JMenuItem("兒童級别");
  grade1.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
      teacherZhang.setMaxInteger(10);
    }
  });
  grade2.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
      teacherZhang.setMaxInteger(50);
    }
  });
  choiceGrade.add(grade1);
  choiceGrade.add(grade2);
  menubar.add(choiceGrade);
  setJMenuBar(menubar);
  textOne=new JTextField(5);
  textTwo=new JTextField(5);
  textResult=new JTextField(5);
  operatorLabel=new JLabel("+");
  operatorLabel.setFont(new Font("Arial",Font.BOLD,20));
  message=new JLabel("你還沒有回答呢");
  getProblem=new JButton("擷取題目");
  giveAnswer=new JButton("擷取答案");
  add(textOne);
  add(operatorLabel);
  add(textTwo);
  add(new JLabel("="));
  add(textResult);
  add(giveAnswer);
  add(message);
  add(getProblem);
  textResult.requestFocus();
  textOne.setEditable(false);
  textTwo.setEditable(false);
  getProblem.setActionCommand("getProblem");
  textResult.setActionCommand("answer");
  giveAnswer.setActionCommand("answer");
  teacherZhang.setJTextField(textOne,textTwo,textResult);
  teacherZhang.setJLabel(operatorLabel,message);
  getProblem.addActionListener(teacherZhang);
  giveAnswer.addActionListener(teacherZhang);
  textResult.addActionListener(teacherZhang);
  setVisible(true);
  validate();
  setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}
}      

MainClass 主類

package math;

public class MainClass {

  /**
   * @param args
   */
  public static void main(String[] args) {
    // TODO Auto-generated method stub
ComputerFrame frame;
frame=new ComputerFrame();
frame.setTitle("算數測試");
frame.setBounds(100,100,650,180);
  }
}