非常实用的java自动答题计时计分器
程序员文章站
2023-12-10 14:45:58
该小程序使用java语言编写,让用户计算10以内的加减乘除法,特别适合小学开始学习加减乘除法的学生,能很好地锻炼他们的运算能力,并过计分计时的游戏性质引起学习兴趣!
运行...
该小程序使用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; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。