非常實(shí)用的java自動(dòng)答題計(jì)時(shí)計(jì)分器
該小程序使用java語言編寫,讓用戶計(jì)算10以內(nèi)的加減乘除法,特別適合小學(xué)開始學(xué)習(xí)加減乘除法的學(xué)生,能很好地鍛煉他們的運(yùn)算能力,并過計(jì)分計(jì)時(shí)的游戲性質(zhì)引起學(xué)習(xí)興趣!
運(yùn)行該程序會(huì)彈出一個(gè)窗口,按enter鍵開始答題,答完再按enter則進(jìn)行計(jì)分和正確性判斷,并出下一道題!每輪10道題,每題10分,答完自動(dòng)計(jì)時(shí)記分,全程操作只需要按enter鍵,無其他按鈕,幼兒園小學(xué)生都會(huì)玩!
并且在輸入合法性方面,也做了相關(guān)校驗(yàn)和提示!歡迎大家發(fā)揮想象力,再此基礎(chǔ)上再豐富和完善!
代碼:
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();//規(guī)則描述標(biāo)簽 Label labA=new Label();//第一個(gè)數(shù)字標(biāo)簽 Label labOp=new Label();//加減乘除標(biāo)簽 Label labB=new Label();//第二個(gè)數(shù)字標(biāo)簽 Label label5=new Label();//等于號(hào)“=”標(biāo)簽 Label labWarn=new Label();//輸入合法性校驗(yàn)提示標(biāo)簽 Label labQues=new Label();//答題列表標(biāo)簽 Label labResult=new Label();//判分標(biāo)簽 TextField txtAnswer=new TextField();//輸入答案輸入框 int total=0;//記錄答題總數(shù) int right=0;//記錄答題正確數(shù)量 int error=0;//記錄答題錯(cuò)誤數(shù)量 int score=0;//記錄答題總分 boolean isOver=false;//一輪結(jié)束后標(biāo)識(shí) boolean isFirst=true;//程序第一次運(yùn)行標(biāo)識(shí) long startTime;//每一輪運(yùn)行開始時(shí)間 List listDisp=new List();//答題列表展示框 List listScore=new List();//分?jǐn)?shù)展示框 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("規(guī)則:每組十道題,每題10分,按ENTER鍵開始,小數(shù)保留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("分?jǐn)?shù)統(tǒng)計(jì):"); 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();// 答案輸入框,鍵盤按鍵監(jiān)聽類 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("請(qǐng)輸入答案!"); labWarn.setVisible(true); }else{ labWarn.setVisible(false); if(!isNumber(txtAnswer.getText())){ labWarn.setText("請(qǐng)輸入數(shù)字!"); 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; //若兩個(gè)數(shù)除不盡,則按四舍五入保留2位小數(shù) 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; } /** * 判斷結(jié)果 * @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錯(cuò)誤 正確答案:"+result; error++; } listDisp.add(resultStr); total++; }catch(NumberFormatException ignored){ } } /** * 統(tǒng)計(jì)分?jǐn)?shù) * @param e */ public void scorePerformed(ActionEvent e){ isOver=true; listScore.clear(); listScore.setVisible(true); String exitStr="本次共答題"+total+"道"; listScore.add(exitStr); listScore.add("累計(jì)用時(shí):"+(System.currentTimeMillis()-startTime)/1000+"秒"); listScore.add("答對(duì):"+right+"個(gè)"); listScore.add("答錯(cuò):"+error+"個(gè)"); listScore.add("得分:"+score+"分"); getContentPane().add(listScore); score=0; right=0; error=0; total=0; } /** * 校驗(yàn)輸入是否位數(shù)字 * @param numberStr * @return */ public boolean isNumber(String numberStr){ boolean isNumber=true; try{ Double.parseDouble(numberStr); }catch(NumberFormatException e){ isNumber=false; } return isNumber; } }
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java中volatile關(guān)鍵字實(shí)現(xiàn)原理
本文詳細(xì)解讀一下volatile關(guān)鍵字如何保證變量在多線程之間的可見性,對(duì)Java中volatile關(guān)鍵字實(shí)現(xiàn)原理感興趣的朋友一起通過本文學(xué)習(xí)吧2017-06-06SSM?Mapper文件查詢出返回?cái)?shù)據(jù)查不到個(gè)別字段的問題
這篇文章主要介紹了SSM?Mapper文件查詢出返回?cái)?shù)據(jù)查不到個(gè)別字段的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01詳解Java內(nèi)部類與對(duì)象的打印概念和流程
在 Java 中,可以將一個(gè)類定義在另一個(gè)類里面或者一個(gè)方法里面,這樣的類稱為內(nèi)部類。廣泛意義上的內(nèi)部類一般來說包括這四種:成員內(nèi)部類、局部內(nèi)部類、匿名內(nèi)部類和靜態(tài)內(nèi)部類2021-10-10執(zhí)行java請(qǐng)求時(shí)導(dǎo)致在腳本執(zhí)行結(jié)束時(shí)JVM無法退出
這篇文章主要介紹了執(zhí)行java請(qǐng)求,導(dǎo)致在腳本執(zhí)行結(jié)束時(shí)JVM無法退出問題,本文通過原因分析給出解決方案,需要的朋友可以參考下2020-02-02Spring5源碼解析之Spring中的異步和計(jì)劃任務(wù)
本篇文章主要介紹了Spring5源碼解析之Spring中的異步和計(jì)劃任務(wù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-10-10