欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

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

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

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

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

非常实用的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; 
 } 
} 

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