非常實(shí)用的java自動(dòng)答題計(jì)時(shí)計(jì)分器
該小程序使用java語(yǔ)言編寫(xiě),讓用戶計(jì)算10以內(nèi)的加減乘除法,特別適合小學(xué)開(kāi)始學(xué)習(xí)加減乘除法的學(xué)生,能很好地鍛煉他們的運(yùn)算能力,并過(guò)計(jì)分計(jì)時(shí)的游戲性質(zhì)引起學(xué)習(xí)興趣!
運(yùn)行該程序會(huì)彈出一個(gè)窗口,按enter鍵開(kāi)始答題,答完再按enter則進(jìn)行計(jì)分和正確性判斷,并出下一道題!每輪10道題,每題10分,答完自動(dòng)計(jì)時(shí)記分,全程操作只需要按enter鍵,無(wú)其他按鈕,幼兒園小學(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)行開(kāi)始時(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鍵開(kāi)始,小數(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();// 答案輸入框,鍵盤(pán)按鍵監(jiān)聽(tīng)類(lèi)
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;
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)快速排序過(guò)程分析
今天小編就為大家分享一篇關(guān)于Java實(shí)現(xiàn)快速排序過(guò)程分析,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-10-10
SpringBoot快速接入DeepSeek?api(帶頁(yè)面)保姆級(jí)教程
這篇文章主要介紹了如何在Java端接入DeepSeek?API,包括申請(qǐng)APIkey、項(xiàng)目結(jié)構(gòu)展示、編寫(xiě)controller和前端界面、以及測(cè)試啟動(dòng)項(xiàng)目的過(guò)程,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-03-03
MyBatis實(shí)現(xiàn)兩種查詢樹(shù)形數(shù)據(jù)的方法詳解(嵌套結(jié)果集和遞歸查詢)
樹(shù)形結(jié)構(gòu)數(shù)據(jù)在開(kāi)發(fā)中十分常見(jiàn),比如:菜單數(shù)、組織樹(shù), 利用 MyBatis 提供嵌套查詢功能可以很方便地實(shí)現(xiàn)這個(gè)功能需求。本文主要介紹了兩種方法,感興趣的可以了解一下2021-09-09
SpringBoot中隨機(jī)鹽值+雙重SHA256加密實(shí)戰(zhàn)
本文主要介紹了SpringBoot中隨機(jī)鹽值+雙重SHA256加密實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07
springboot整合Mybatis-plus的實(shí)現(xiàn)
這篇文章主要介紹了springboot整合Mybatis-plus的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
Spring Cloud 覆寫(xiě)遠(yuǎn)端的配置屬性實(shí)例詳解
這篇文章主要介紹了Spring Cloud 覆寫(xiě)遠(yuǎn)端的配置屬性的相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-01-01
Java拼接字符串時(shí)如何去掉最后一個(gè)多余的逗號(hào)
當(dāng)我們遍歷拼接字符串的時(shí)候,最后會(huì)多出一個(gè)我們添加的字符(比如逗號(hào)),下面通過(guò)實(shí)例代碼給大家介紹Java拼接字符串時(shí)去掉最后一個(gè)多余的逗號(hào),感興趣的朋友跟隨小編一起看看吧2024-12-12

