首页 > 开发 > Java > 正文

非常实用的java自动答题计时计分器

2024-07-13 10:16:49
字体:
来源:转载
供稿:网友

该小程序使用java语言编写,让用户计算10以内的加减乘除法,特别适合小学开始学习加减乘除法的学生,能很好地锻炼他们的运算能力,并过计分计时的游戏性质引起学习兴趣!

运行该程序会弹出一个窗口,按enter键开始答题,答完再按enter则进行计分和正确性判断,并出下一道题!每轮10道题,每题10分,答完自动计时记分,全程操作只需要按enter键,无其他按钮,幼儿园小学生都会玩!

并且在输入合法性方面,也做了相关校验和提示!欢迎大家发挥想象力,再此基础上再丰富和完善!

java,自动答题,计时,计分器,java答题计分器,java自动答题计分器

代码:

package autoScore;   import java.awt.Color; import java.awt.Font; import java.awt.Label; import java.awt.List; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.text.DecimalFormat;   import javax.swing.JFrame;  public class AutoScore extends JFrame{  Label labRule=new Label();//规则描述标签  Label labA=new Label();//第一个数字标签  Label labOp=new Label();//加减乘除标签  Label labB=new Label();//第二个数字标签  Label label5=new Label();//等于号“=”标签  Label labWarn=new Label();//输入合法性校验提示标签  Label labQues=new Label();//答题列表标签  Label labResult=new Label();//判分标签  TextField txtAnswer=new TextField();//输入答案输入框    int total=0;//记录答题总数  int right=0;//记录答题正确数量  int error=0;//记录答题错误数量  int score=0;//记录答题总分  boolean isOver=false;//一轮结束后标识  boolean isFirst=true;//程序第一次运行标识    long startTime;//每一轮运行开始时间    List listDisp=new List();//答题列表展示框  List listScore=new List();//分数展示框    public static void main(String[] args){   AutoScore score=new AutoScore();  }    public AutoScore(){   init();   setSize(450,630);   setDefaultCloseOperation(EXIT_ON_CLOSE);   setVisible(true);  }     public void init(){   setLayout(null);   setSize(450,630);     labRule.setText("规则:每组十道题,每题10分,按ENTER键开始,小数保留2位");   labRule.setBounds(36, 10, 390, 72);   labRule.setFont(new Font("Dialog",Font.PLAIN,12));   getContentPane().add(labRule);      labA.setText("x");   labA.setBounds(36,82,36,36);   labA.setFont(new Font("Dialog",Font.PLAIN,24));   getContentPane().add(labA);      labOp.setText("+");   labOp.setFont(new Font("Dialog",Font.PLAIN,24));   labOp.setBounds(72, 82, 45, 36);   getContentPane().add(labOp);      labB.setText("y");   labB.setFont(new Font("Dialog",Font.PLAIN,24));   labB.setBounds(118, 82, 33, 36);   getContentPane().add(labB);      label5.setText("=");   label5.setFont(new Font("Dialog",Font.PLAIN,24));   label5.setBounds(168, 82, 24, 36);   getContentPane().add(label5);         labWarn.setFont(new Font("Dialog",Font.PLAIN,12));   labWarn.setBackground(Color.RED);   labWarn.setBounds(320, 82, 80, 36);   labWarn.setVisible(false);   getContentPane().add(labWarn);      labQues.setText("答题列表:");   labQues.setFont(new Font("Dialog",Font.PLAIN,12));   labQues.setBounds(36, 148, 100, 20);   getContentPane().add(labQues);      labResult.setText("分数统计:");   labResult.setFont(new Font("Dialog",Font.PLAIN,12));   labResult.setBounds(36,420,100,20);   labResult.setVisible(false);   getContentPane().add(labResult);      txtAnswer.setFont(new Font("Dialog",Font.PLAIN,24));   txtAnswer.setBounds(216, 82, 100, 36);   getContentPane().add(txtAnswer);         listDisp.setFont(new Font("Dialog",Font.PLAIN,16));   listDisp.setBounds(36, 174, 282, 230);   getContentPane().add(listDisp);      listScore.setFont(new Font("Dialog",Font.PLAIN,16));   listScore.setBounds(36,450,282,135);      MyKey myKey=new MyKey();// 答案输入框,键盘按键监听类   txtAnswer.addKeyListener(myKey);     }    class MyKey implements KeyListener{    @Override   public void keyTyped(KeyEvent e) {       }    @Override   public void keyPressed(KeyEvent e) {    if(e.getSource()==txtAnswer){     if(e.getKeyCode()==KeyEvent.VK_ENTER){      if(isOver || isFirst){       updateQuestion(null);      }else if("".equals(txtAnswer.getText())){       labWarn.setText("请输入答案!");       labWarn.setVisible(true);      }else{       labWarn.setVisible(false);       if(!isNumber(txtAnswer.getText())){        labWarn.setText("请输入数字!");        labWarn.setVisible(true);       }else if(total<9){        judge(null);        updateQuestion(null);       }else{        judge(null);        labResult.setVisible(true);        scorePerformed(null);       }      }     }    }       }    @Override   public void keyReleased(KeyEvent e) {       }     }      int a=0,b=0;  String op="";  double result=0;  DecimalFormat df=new DecimalFormat("#.00");  /**   * 出题方法   * @param e   */  public void updateQuestion(ActionEvent e){   if(isFirst){    startTime=System.currentTimeMillis();   }   if(isOver==true){    listDisp.clear();    listScore.clear();    labResult.setVisible(false);    listScore.setVisible(false);   }   isOver=false;   a=(int)(Math.random()*9+1);   b=(int)(Math.random()*9+1);   int c=(int)(Math.random()*4);   switch (c) {   case 0:    op="+";    result=a+b;    break;   case 1:    op="-";    result=a-b;    break;   case 2:    op="*";    result=a*b;    break;   case 3:    op="/";    result=(a*1.0)/b;    //若两个数除不尽,则按四舍五入保留2位小数    if(String.valueOf(result).length()>10){     result=Double.parseDouble(df.format((a*1.0)/b));    }    break;   }   labA.setText(String.valueOf(a));   labB.setText(String.valueOf(b));   labOp.setText(op);   label5.setText("=");   txtAnswer.setText("");   isFirst=false;     }  /**   * 判断结果   * @param e   */  public void judge(ActionEvent e){   try{    double value=Double.parseDouble(txtAnswer.getText());    String resultStr=(total+1)+"、 "+a+op+b+"="+value;    if(value==result){     resultStr+=" /t正确";     right++;     score+=10;    }else{     resultStr+=" /t错误 正确答案:"+result;     error++;    }    listDisp.add(resultStr);    total++;   }catch(NumberFormatException ignored){   }  }  /**   * 统计分数   * @param e   */  public void scorePerformed(ActionEvent e){   isOver=true;   listScore.clear();   listScore.setVisible(true);   String exitStr="本次共答题"+total+"道";   listScore.add(exitStr);   listScore.add("累计用时:"+(System.currentTimeMillis()-startTime)/1000+"秒");   listScore.add("答对:"+right+"个");   listScore.add("答错:"+error+"个");   listScore.add("得分:"+score+"分");   getContentPane().add(listScore);   score=0;   right=0;   error=0;   total=0;     }    /**   * 校验输入是否位数字   * @param numberStr   * @return   */  public boolean isNumber(String numberStr){   boolean isNumber=true;   try{    Double.parseDouble(numberStr);   }catch(NumberFormatException e){    isNumber=false;   }   return isNumber;  } } 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VeVb武林网。


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表