服务器之家

服务器之家 > 正文

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

时间:2021-03-23 13:27     来源/作者:guohan_solft

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

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
返回顶部