非常实用的java语言自动答题计时计分器[Java代码]
龚超 2018-07-19 来源 : 阅读 1940 评论 0

摘要:本文主要向大家介绍了非常实用的java语言自动答题计时计分器,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了非常实用的java语言自动答题计时计分器,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

该小程序使用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;

}

}

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!

本文由 @职坐标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论
本文作者 联系TA

擅长针对企业软件开发的产品设计及开发的细节与流程设计课程内容。座右铭:大道至简!

  • 370
    文章
  • 22919
    人气
  • 87%
    受欢迎度

已有23人表明态度,87%喜欢该老师!

进入TA的空间
求职秘籍 直通车
  • 索取资料 索取资料 索取资料
  • 答疑解惑 答疑解惑 答疑解惑
  • 技术交流 技术交流 技术交流
  • 职业测评 职业测评 职业测评
  • 面试技巧 面试技巧 面试技巧
  • 高薪秘笈 高薪秘笈 高薪秘笈
TA的其他文章 更多>>
WEB前端必须会的基本知识题目
经验技巧 93% 的用户喜欢
Java语言中四种遍历List的方法总结(推荐)
经验技巧 91% 的用户喜欢
Java语言之SHA-256加密的两种实现方法详解
经验技巧 75% 的用户喜欢
java语言实现把两个有序数组合并到一个数组的实例
经验技巧 75% 的用户喜欢
通过Java语言代码来创建view的方法
经验技巧 80% 的用户喜欢
其他海同师资 更多>>
吕益平
吕益平 联系TA
熟悉企业软件开发的产品设计及开发
孔庆琦
孔庆琦 联系TA
对MVC模式和三层架构有深入的研究
周鸣君
周鸣君 联系TA
擅长Hadoop/Spark大数据技术
范佺菁
范佺菁 联系TA
擅长Java语言,只有合理的安排和管理时间你才能做得更多,行得更远!
金延鑫
金延鑫 联系TA
擅长与学生或家长及时有效沟通
经验技巧30天热搜词 更多>>

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程