服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - 非常实用的java自动答题计时计分器

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

2021-03-23 13:27guohan_solft Java教程

这篇文章主要为大家详细介绍了非常实用的java自动答题计时计分器的实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

该小程序使用java语言编写,让用户计算10以内的加减乘除法,特别适合小学开始学习加减乘除法的学生,能很好地锻炼他们的运算能力,并过计分计时的游戏性质引起学习兴趣!

运行该程序会弹出一个窗口,按enter键开始答题,答完再按enter则进行计分和正确性判断,并出下一道题!每轮10道题,每题10分,答完自动计时记分,全程操作只需要按enter键,无其他按钮,幼儿园小学生都会玩!

并且在输入合法性方面,也做了相关校验和提示!欢迎大家发挥想象力,再此基础上再丰富和完善!

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

代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
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;
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:http://blog.csdn.net/guohan_solft/article/details/73322938

延伸 · 阅读

精彩推荐