java实现计分_非常实用的java自动答题计时计分器
該小程序使用java語言編寫,讓用戶計算10以內的加減乘除法,特別適合小學開始學習加減乘除法的學生,能很好地鍛煉他們的運算能力,并過計分計時的游戲性質引起學習興趣!
運行該程序會彈出一個窗口,按enter鍵開始答題,答完再按enter則進行計分和正確性判斷,并出下一道題!每輪10道題,每題10分,答完自動計時記分,全程操作只需要按enter鍵,無其他按鈕,幼兒園小學生都會玩!
并且在輸入合法性方面,也做了相關校驗和提示!歡迎大家發揮想象力,再此基礎上再豐富和完善!
@H_301_7@
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",24));
getContentPane().add(labA);
labOp.setText("+");
labOp.setFont(new Font("Dialog",24));
labOp.setBounds(72,45,36);
getContentPane().add(labOp);
labB.setText("y");
labB.setFont(new Font("Dialog",24));
labB.setBounds(118,33,36);
getContentPane().add(labB);
label5.setText("=");
label5.setFont(new Font("Dialog",24));
label5.setBounds(168,24,36);
getContentPane().add(label5);
labWarn.setFont(new Font("Dialog",12));
labWarn.setBackground(Color.RED);
labWarn.setBounds(320,80,36);
labWarn.setVisible(false);
getContentPane().add(labWarn);
labQues.setText("答題列表:");
labQues.setFont(new Font("Dialog",12));
labQues.setBounds(36,148,100,20);
getContentPane().add(labQues);
labResult.setText("分數統計:");
labResult.setFont(new Font("Dialog",12));
labResult.setBounds(36,420,20);
labResult.setVisible(false);
getContentPane().add(labResult);
txtAnswer.setFont(new Font("Dialog",24));
txtAnswer.setBounds(216,36);
getContentPane().add(txtAnswer);
listDisp.setFont(new Font("Dialog",16));
listDisp.setBounds(36,174,282,230);
getContentPane().add(listDisp);
listscore.setFont(new Font("Dialog",16));
listscore.setBounds(36,450,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;
}
}
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持編程小技巧。
總結
如果覺得編程之家網站內容還不錯,歡迎將編程之家網站推薦給程序員好友。
本圖文內容來源于網友網絡收集整理提供,作為學習參考使用,版權屬于原作者。
如您喜歡交流學習經驗,點擊鏈接加入交流1群:1065694478(已滿)交流2群:163560250
總結
以上是生活随笔為你收集整理的java实现计分_非常实用的java自动答题计时计分器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java aio_java中的AIO
- 下一篇: python中的模块如何学习_在pyth