当前位置: 移动技术网 > IT编程>开发语言>Java > 非常实用的java自动答题计时计分器

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

2019年07月19日  | 移动技术网IT编程  | 我要评论

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

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

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

代码:

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; 
 } 
} 

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网