非常实用的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)

相关推荐

  • Java实现排球比赛计分系统

    初步计划: 或许由于个人原因,排球计分系统在假期就完成了,一直未写博客,就这样一直在推就是不想写,在加上过完年就工作了,可能刚实习工作比较紧所以一直等到现在. 写这个系统之前我简单构思了一下,因为离校前我去洛阳参加了一个多月的Java培训,所以写项目用的ide是Java环境.刚开始考虑用jsp做界面,架构用mvc,但是后来一想工作量太大而且效果也不是很好.最终写了纯Java代码,在虚拟机上展示. 需求分析: 排球竞赛为五局三胜制,每局比赛中得够25分并且领先对方2分以上的一方将获得一局胜利,先获

  • 非常实用的java自动答题计时计分器

    该小程序使用java语言编写,让用户计算10以内的加减乘除法,特别适合小学开始学习加减乘除法的学生,能很好地锻炼他们的运算能力,并过计分计时的游戏性质引起学习兴趣! 运行该程序会弹出一个窗口,按enter键开始答题,答完再按enter则进行计分和正确性判断,并出下一道题!每轮10道题,每题10分,答完自动计时记分,全程操作只需要按enter键,无其他按钮,幼儿园小学生都会玩! 并且在输入合法性方面,也做了相关校验和提示!欢迎大家发挥想象力,再此基础上再丰富和完善! 代码: package aut

  • 详解Java 自动装箱与拆箱的实现原理

    什么是自动装箱和拆箱 自动装箱就是Java自动将原始类型值转换成对应的对象,比如将int的变量转换成Integer对象,这个过程叫做装箱,反之将Integer对象转换成int类型值,这个过程叫做拆箱.因为这里的装箱和拆箱是自动进行的非人为转换,所以就称作为自动装箱和拆箱.原始类型byte, short, char, int, long, float, double 和 boolean 对应的封装类为Byte, Short, Character, Integer, Long, Float, Dou

  • 浅谈Java自动装箱与拆箱及其陷阱

    在本文中,笔者向大家介绍下Java中一个非常重要也非常有趣的特性,就是自动装箱与拆箱,并从源码中解读自动装箱与拆箱的原理,同时这种特性也留有一个陷阱.开发者如果不注意,就会很容易跌入这个陷阱. 自动装箱(Autoboxing) 定义 大家在平时编写Java程序时,都常常以以下方式来定义一个Integer对象: Integer i=100; 从上面的代码中,大家可以得知,i为一个Integer类型的引用,100为Java中的基础数据类型(primitive data type).而这种直接将一个基

  • java自动生成ID号的方法

    本文实例讲述了java自动生成ID号的方法.分享给大家供大家参考.具体实现方法如下: import java.util.UUID; public class SystemAttribute { public static String getUUID() { return UUID.randomUUID().toString().replace("-",""); } } 希望本文所述对大家的java程序设计有所帮助.

  • C#开发答题赢钱游戏(自动答题器)

    一.前言 现在最火的直播游戏,那就是答题赢钱直播了,如百万英雄.芝士超人.花椒直播.冲顶大会等等,这些游戏的玩法都很简单,答对12题即可瓜分奖金了.玩法虽然简单,但是要能完全答对12题难度还是挺高的,毕竟要非常广的知识面! 二.怎么做自动答题 要能自动答题,肯定是要能知道题目及答案了.题目可以从直播界面获取,方法就是OCR或者搞到数据接口了---嘿嘿,都说了简单教你,所以OCR或者分析数据接口这些复杂的操作,我肯定不教你了(我也不会啊^_%)-- 幸好,现在市面上有一些非常有技术"逼格"

  • java自动生成编号的实现(格式:yyMM+四位流水号)

    本篇文章主要介绍了java自动生成编号的实现,分享给大家,具体如下 /** * 自动生成编号格式:yyMM+四位流水号 */ @RequestMapping(params = "createCode") @ResponseBody public AjaxJson createCode(HttpServletRequest request, String tableName, String fieldName) { AjaxJson j = new AjaxJson(); String

  • 详解Java 自动装箱与自动拆箱

    包装器 有些时候,我们需要把类似于int,double这样的基本数据类型转成对象,于是设计者就给每一个基本数据类型都配置了一个对应的类,这些类被称为包装器. 包装器整体来说分为四大种: Number,Number类派生出了Integer,Double,Long,Float,Short,Byte这六个小类分别代表了int,double,long,float,short,byte这六种基本数据类型. Character,对应的基本数据类型是char. Void,对应的是关键字void,这个类我们会经

  • Java 自动安装校验TLS/SSL证书

    前言 最近实现Socks5 proxy与HTTP proxy中遇到了SSLSocket隧道的问题,当然,最终问题经过自动证书校验安装管理器实现了证书的管理,也解决了SSLSocket,但是目前的问题是浏览器对Socks5和HTTP proxy还有很多不足,目前实现的两个代理工具只能在程序中使用.当然,我们今天的主要话题如下: Java 实现TLS/SSL证书的自动安装校验,主要经过ssl/tls握手,密钥交换,证书校验机制实现.我们这里模拟浏览器,实现自动校验和证书的检测. 主要实现如下功能:

  • Java自动拆箱空指针异常的解决

    公司搬迁,临时充当装修工,提前两个小时到公司忙着拆卸设备.结果接到客户反映,某部分功能偶尔不能用.于是参与救火,与写这段代码的小伙伴一起排查原因. 最终发现导致业务偶尔不能使用是由Long类型自动拆箱导致空指针异常引起的.下面就带大家分析一下Java中基础类型的包装类在拆箱和装箱过程中都做了什么,为什么会出现空指针异常,以及面试过程中会出现的相关面试题. 问题重现 下面通过一个简单的示例才重现一下异常出现的场景. public class BoxTest { public static void

  • flyway实现java 自动升级SQL脚本的问题及解决方法

    为什么要用Flyway 在日常开发中,我们经常会遇到下面的问题: 自己写的SQL忘了在所有环境执行: 别人写的SQL我们不能确定是否都在所有环境执行过了: 有人修改了已经执行过的SQL,期望再次执行: 需要新增环境做数据迁移: 每次发版需要手动控制先发DB版本,再发布应用版本; 其它场景... 由于项目需求的变化,或者前期设计缺陷,导致在后期需要修改数据库,这应该是一个比较常见的事情,如果项目还没上线,你可能把表删除了重新创建,但是如果项目已经上线了,就不能这样简单粗暴了,每次运维部署项目,还得

随机推荐