结对作业 四则运算
一、我们这次的代码是在Eclipse的环境下写的
二、做的四个方向分别为:
1.可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。如: 2*(-4) = -8
2.用户答题结束以后,程序可以显示用户答题所用的时间
3.用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数
4.程序可以出单个整数阶乘的题目:如:4!=24
三、我的结伴队友是52林惠映 博客地址:http://www.cnblogs.com/LHYwin/
四、在这个结对任务中,我是负责编写1,4,林惠映负责编写2,3,还有写注释。程序的整体部分是我们两个共同完成的。
五、过程中我们遇到要解决的主要问题:
1、处理除法运算时要考虑除数不能为0的情况;
2、设置了按钮要处理按钮监听事件;
3、除法运算中要处理除不尽的情况,将结果设置为保留小数点后两位;
4、判读第一个操作数与第二个操作数是否为负数并加括号时要分四种情况;
5、处理时间计时的情况一定要将字符串转换为整型;
六、我们这次写这个程序估计大概用10个小时左右。
总结:这次的结对任务让我更懂得了如何与别人合作写一个程序,一开始的时候我是很不习惯和别人合作来写一段代码的,因为不知道怎么和和对方配合。
不过经过了几次的交流,我们慢慢有了默契。合作后我发现写代码的概率大大的提高了。因为在一个人写错了某个地方的时候,对方会马上指出来,避免了更大的错误。而且两个人的合作效率会更高。
过程中也明白了两个人合作和一个人写的区别在于自己一个想问题很容易转牛角尖,而两个人想,另一个人会给出正确的方向,导致遇到问题很快能够解决。
二、做的四个方向分别为:
1.可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。如: 2*(-4) = -8
2.用户答题结束以后,程序可以显示用户答题所用的时间
3.用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数
4.程序可以出单个整数阶乘的题目:如:4!=24
三、我的结伴队友是52林惠映 博客地址:http://www.cnblogs.com/LHYwin/
四、在这个结对任务中,我是负责编写1,4,林惠映负责编写2,3,还有写注释。程序的整体部分是我们两个共同完成的。
五、过程中我们遇到要解决的主要问题:
1、处理除法运算时要考虑除数不能为0的情况;
2、设置了按钮要处理按钮监听事件;
3、除法运算中要处理除不尽的情况,将结果设置为保留小数点后两位;
4、判读第一个操作数与第二个操作数是否为负数并加括号时要分四种情况;
5、处理时间计时的情况一定要将字符串转换为整型;
六、我们这次写这个程序估计大概用10个小时左右。
总结:这次的结对任务让我更懂得了如何与别人合作写一个程序,一开始的时候我是很不习惯和别人合作来写一段代码的,因为不知道怎么和和对方配合。
不过经过了几次的交流,我们慢慢有了默契。合作后我发现写代码的概率大大的提高了。因为在一个人写错了某个地方的时候,对方会马上指出来,避免了更大的错误。而且两个人的合作效率会更高。
过程中也明白了两个人合作和一个人写的区别在于自己一个想问题很容易转牛角尖,而两个人想,另一个人会给出正确的方向,导致遇到问题很快能够解决。
代码如下:
1 import java.awt.*; 2 import java.awt.event.*; 3 import javax.swing.*; 4 public class Size { 5 public static void main(String[] args) { 6 new Frame(); 7 8 } 9 } 10 import javax.swing.*; 11 12 import java.awt.event.*; 13 import java.math.BigDecimal; 14 import java.text.DecimalFormat; 15 import java.text.NumberFormat; 16 17 class Frame extends JFrame implements ActionListener 18 { 19 int a, b, c, count, num;//a,b分别是第一个操作数,第二个操作数,c是存放用户输入的答案,count是题目总数,num是用于存放代表运算符的数 20 int t=0,f=0,sum=0,s=1;//s表示阶乘结果 21 float d,d1;//d是用于存放除法结果,d1是用于处理除法结果中保留小数点后两位 22 int counter=0;//统计答题个数 23 Timer time; 24 int t1 = 0; 25 JTextField T;//定义一个文本 26 JLabel L1 = new JLabel("请输入题目个数(1-5):"); 27 JTextField T1 = new JTextField(5); //放题目个数 28 JButton B3 = new JButton("开始"); 29 JTextField T2 = new JTextField(10); //设置运算式 30 JTextField T3 = new JTextField(10); //获取输入答案 31 JTextField T4 = new JTextField(10);//存放答案提示 32 JButton B1 = new JButton("确定"); 33 JButton B2 = new JButton("下一题"); 34 35 Frame() { 36 T=new JTextField(10);//计时 37 T.setEditable(false); 38 time = new Timer(1000, this); 39 time.start(); 40 T.setText(setTime(t1)); 41 this.setTitle("四则运算"); 42 this.setSize(280, 200); 43 this.setVisible(true); 44 this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); 45 JPanel p2 = new JPanel(); 46 JPanel p1 = new JPanel(); 47 p2.add(L1); 48 p2.add(T1); 49 p2.add(B3); 50 p2.add(T2); 51 p2.add(T3); 52 p2.add(T4); 53 p2.add(T); 54 p1.add(B1); 55 p1.add(B2); 56 add(p2, "Center"); 57 add(p1, "South"); 58 59 B3.addActionListener(new ActionListener() { //按钮B3表示开始 60 public void actionPerformed(ActionEvent e) { 61 boolean flag=false; 62 Object bj = e.getSource(); // 获得事件源 63 if (bj == B3) { 64 try{ //如果输入字符,抛出异常,提示错误 65 count = Integer.parseInt(T1.getText()); //将文本中获取的字符串转换为整型 66 } 67 catch(Exception f) 68 { 69 flag=true; 70 } 71 if(flag) 72 { 73 JOptionPane.showMessageDialog(null,"输入有误,请输入数字!"); 74 } 75 if(count>5) 76 { 77 JOptionPane.showMessageDialog(null, "题目个数不能超过五个!请重新输入。"); 78 } 79 if(count<=5) 80 { 81 num = (int) (Math.random() * 5); 82 a = (int) (Math.random() * 200) - 100; 83 b = (int) (Math.random() * 200) - 100; 84 if (num == 0)//num为0时,是加法运算 85 { 86 if (a < 0 && b < 0) //判断a,b的正负并给负数加括号 87 { 88 T2.setText("(" + a + ")" + "+(" + b + ")="); 89 } 90 else if (a < 0 && b > 0) 91 { 92 T2.setText("(" + a + ")" + "+" + b + "="); 93 } 94 else if (a > 0 && b < 0) 95 { 96 T2.setText(a + "+(" + b + ")="); 97 } 98 else 99 { 100 T2.setText(a + "+" + b + "="); 101 } 102 c = a + b; 103 //处理按钮监听事件 104 105 } else if (num == 1) //num为1表示减法运算 106 { 107 if (a < 0 && b < 0) 108 { 109 T2.setText("(" + a + ")" + "-(" + b + ")="); 110 } 111 else if (a < 0 && b > 0) 112 { 113 T2.setText("(" + a + ")" + "-" + b + "="); 114 } 115 else if (a > 0 && b < 0) 116 { 117 T2.setText(a + "-(" + b + ")="); 118 } 119 else 120 { 121 T2.setText(a + "-" + b + "="); 122 } 123 c = a - b; 124 125 } else if (num == 2) { //num为2表示乘法运算 126 if (a < 0 && b < 0) { 127 T2.setText("(" + a + ")" + "*(" + b + ")="); 128 129 } else if (a < 0 && b > 0) { 130 T2.setText("(" + a + ")" + "*" + b + "="); 131 132 } else if (a > 0 && b < 0) { 133 T2.setText(a + "*(" + b + ")="); 134 135 } else { 136 T2.setText(a + "*" + b + "="); 137 138 } 139 c = a * b; 140 } 141 else if (num == 3&&b!=0) { //num为3表示除法运算,并且要考虑除数不能为0的情况,因此b!=0 142 if (a < 0 && b< 0) { 143 T2.setText("(" + a + ")" + "/(" + b + ")="); 144 145 } else if (a < 0 && b > 0) { 146 T2.setText("(" + a + ")" + "/" + b + "="); 147 148 } else if (a > 0 && b< 0) { 149 T2.setText(a + "/(" + b + ")="); 150 151 } else { 152 T2.setText(a + "/" + b + "="); 153 154 } 155 d= (float)a/(float)b; //将整型a,b强制转换为浮点型,保证结果正确 156 BigDecimal bg = new BigDecimal(d); //将除法结果保留小数点后两位 157 d1 =(float)bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); 158 } 159 else 160 { 161 a=(int)(Math.random()*10); 162 T2.setText(a+"!="); 163 int i; 164 if(a==0||a==1) 165 { 166 s=1; 167 } 168 else 169 { 170 171 for(i=1;i<=a;i++)//计算阶乘 172 { 173 s=s*i; 174 } 175 } 176 } 177 178 } 179 } 180 } 181 }); 182 B2.addActionListener(new ActionListener() { //B2表示下一题 183 public void actionPerformed(ActionEvent e) { 184 Object bj = e.getSource(); // 获得事件源 185 if (bj == B2) { 186 int a, b, num, i = 1; 187 if (i < count) { 188 T3.setText(null);//当按钮按下一题时就将T3与T4的内容更新 189 T4.setText(null); 190 num = (int) (Math.random() * 5); 191 a = (int) (Math.random() * 200) - 100; 192 b = (int) (Math.random() * 200) - 100; 193 i++; 194 if (num == 0) { 195 if (a < 0 && b < 0) { 196 T2.setText("(" + a + ")" + "+(" + b + ")="); 197 } else if (a < 0 && b > 0) { 198 T2.setText("(" + a + ")" + "+" + b + "="); 199 } else if (a > 0 && b < 0) { 200 T2.setText(a + "+(" + b + ")="); 201 } else { 202 T2.setText(a + "+" + b + "="); 203 } 204 c = a + b; 205 } else if (num == 1) { 206 if (a < 0 && b < 0) { 207 T2.setText("(" + a + ")" + "-(" + b + ")="); 208 209 } else if (a < 0 && b > 0) { 210 T2.setText("(" + a + ")" + "-" + b + "="); 211 } else if (a > 0 && b < 0) { 212 T2.setText(a + "-(" + b + ")="); 213 } else { 214 T2.setText(a + "-" + b + "="); 215 } 216 c = a - b; 217 218 } else if (num == 2) { 219 if (a < 0 && b < 0) { 220 T2.setText("(" + a + ")" + "*(" + b + ")="); 221 222 } else if (a < 0 && b > 0) { 223 T2.setText("(" + a + ")" + "*" + b + "="); 224 225 } else if (a > 0 && b < 0) { 226 T2.setText(a + "*(" + b + ")="); 227 228 } else { 229 T2.setText(a + "*" + b + "="); 230 231 } 232 c = a * b; 233 234 235 } 236 else if (num == 3&&b!=0) { 237 if (a < 0 && b < 0) { 238 T2.setText("(" + a + ")" + "/(" + b + ")="); 239 240 } else if (a < 0 && b > 0) { 241 T2.setText("(" + a + ")" + "/" + b + "="); 242 } else if (a > 0 && b < 0) { 243 T2.setText(a + "/(" + b + ")="); 244 } else { 245 T2.setText(a + "/" + b + "="); 246 } 247 d= (float)a/(float)b; 248 BigDecimal bg = new BigDecimal(d); 249 d1 =(float)bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); 250 251 252 } 253 else 254 { 255 a=(int)(Math.random()*10); 256 T2.setText(a+"!="); 257 if(a==0||a==1) 258 { 259 s=1; 260 } 261 else 262 { 263 264 for(i=1;i<=a;i++)//计算阶乘 265 { 266 s=s*i; 267 } 268 } 269 } 270 271 counter++; 272 if(counter>=count)//判断题目是否答完,答完了就弹出一个提示题目答完并给出答题时间的对话框 273 { 274 JOptionPane.showMessageDialog(null, "题目已答完,答对了"+t+"道题,答错了"+f+"道题\n\n总分是"+sum+"\n\n总用时为:"+t1+"秒"); 275 } 276 } 277 } 278 } 279 }); 280 B1.addActionListener(new ActionListener() { //按钮B1表示确定 281 public void actionPerformed(ActionEvent e) { 282 Object bj = e.getSource(); // 获得事件源 283 if (bj == B1) { 284 if (d1== Float.parseFloat(T3.getText()) || c == Float.parseFloat(T3.getText()) || s ==Float.parseFloat(T3.getText())) { 285 T4.setText("恭喜你,答对了"); 286 t=t+1; 287 sum=sum+20;//每答对一题加20分 288 } else { 289 T4.setText("抱歉,你答错了"); 290 f=f+1; 291 } 292 } 293 } 294 }); 295 296 } 297 public void actionPerformed(ActionEvent e) { 298 t1= t1 + 1; //累加时间 299 T.setText(setTime(t1)); 300 301 } 302 public String setTime(int t1) {//累加时间 303 int hour, minute, second, a; 304 String mytimer, strsec, strmin, strhour; 305 t1=t1 % (60 * 60 * 24); 306 second = t1 % 60; 307 a = t1/ 60; 308 minute = a % 60; 309 310 hour = a / 60; 311 if (second <= 9) { 312 strsec = "0" + String.valueOf(second); 313 } else { 314 strsec = String.valueOf(second); 315 } 316 if (minute <= 9) { 317 strmin = "0" + String.valueOf(minute); 318 } else { 319 strmin = String.valueOf(minute); 320 } 321 if (hour <= 9) { 322 strhour = "0" + String.valueOf(hour); 323 } else { 324 strhour = String.valueOf(hour); 325 } 326 mytimer = "计时: " + strhour + ":" + strmin + ":" + strsec; 327 return mytimer; 328 } 329 330 331 }
运行结果:
这是写代码时的照片