1 import java.util.*; 2 import java.math.*; 3 import java.awt.*; 4 import javax.swing.*; 5 import java.awt.event.*; 6 public class SiZi extends JFrame implements ActionListener{ 7 JLabel L1,L2,L3,L4,L5,Ltimu; 8 JTextField inputtext,answertxet; 9 JButton B1,B2,B3,B4; 10 int number,i,n,op,tid=1,count=0,backcolor=0,jieflag=0; 11 int d1,d2, d3; 12 public SiZi() 13 { 14 super("四则运算"); 15 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 16 setSize(400,250); 17 this.setLocationRelativeTo(null); 18 L1=new JLabel("输入出题数:"); 19 L2=new JLabel("题目:"); 20 L3=new JLabel("输入答案:"); 21 L4=new JLabel("反馈信息:"); 22 L5=new JLabel(" "); 23 B1=new JButton("换肤"); 24 B2=new JButton("下一题"); 25 B3=new JButton("提交答案");B4=new JButton("阶乘运算"); 26 Ltimu=new JLabel(" "); 27 inputtext=new JTextField(10); 28 answertxet=new JTextField(10); 29 inputtext.addActionListener(this); 30 answertxet.addActionListener(this); 31 B1.addActionListener(this); 32 B2.addActionListener(this);B3.addActionListener(this);B4.addActionListener(this); 33 GridLayout layout=new GridLayout(7,2); 34 getContentPane().setLayout(layout); 35 getContentPane().setBackground(Color.white); 36 L1.setHorizontalAlignment(L1.RIGHT); 37 L2.setHorizontalAlignment(L2.RIGHT); 38 L3.setHorizontalAlignment(L3.RIGHT); 39 L4.setHorizontalAlignment(L4.RIGHT); 40 L5.setHorizontalAlignment(L5.CENTER); 41 Ltimu.setHorizontalAlignment(L5.CENTER); 42 inputtext.setHorizontalAlignment(inputtext.CENTER); 43 add(L1);add(inputtext); 44 add(L2);add(Ltimu); 45 add(L3);add(answertxet); 46 add(L4);add(L5); 47 add(B3);add(B2);add(B1);add(B4); 48 setVisible(true); 49 setResizable(false); 50 } 51 52 public static void main(String[] args) 53 54 { 55 SiZi frame=new SiZi(); 56 } 57 58 59 public void actionPerformed(ActionEvent e){ 60 if(e.getSource()==inputtext) 61 { 62 String str=inputtext.getText();L5.setText(""); 63 boolean isAllLetter = true;//定义一个boolean值,用来表示是否不含包含数字 64 for(int i=0 ; i<str.length() ; i++)//循环遍历字符串 65 if(!Character.isDigit(str.charAt(i))){ //用char包装类中的判断数字的方法判断每一个字符 66 isAllLetter = false; 67 } 68 if(isAllLetter){ 69 number=Integer.parseInt(str);n=number; 70 if(number>0&&number<6) 71 { 72 op=(int) (Math.random()*5); 73 d1=(int) (Math.random()*200-100); 74 d2=(int) (Math.random()*200-100); 75 d3=(int) (Math.random()*200-100); 76 switch(op) 77 { 78 case 0: 79 if(d2<0&&d3<0)Ltimu.setText(String.valueOf(d1)+"+("+String.valueOf(d2)+")×("+String.valueOf(d3)+")="); 80 else if (d2<0&&d3>0)Ltimu.setText(String.valueOf(d1)+"+("+String.valueOf(d2)+")×"+String.valueOf(d3)+"="); 81 else if (d2>0&&d3>0)Ltimu.setText(String.valueOf(d1)+"+"+String.valueOf(d2)+"×"+String.valueOf(d3)+"="); 82 else if (d2<0&&d3>0)Ltimu.setText(String.valueOf(d1)+"+"+String.valueOf(d2)+"×("+String.valueOf(d3)+")=");break; 83 case 1: 84 if(d2<0&&d3<0)Ltimu.setText(String.valueOf(d1)+"+("+String.valueOf(d2)+")÷("+String.valueOf(d3)+")="); 85 else if (d2<0&&d3>0)Ltimu.setText(String.valueOf(d1)+"+("+String.valueOf(d2)+")÷"+String.valueOf(d3)+"="); 86 else if (d2>0&&d3>0)Ltimu.setText(String.valueOf(d1)+"+"+String.valueOf(d2)+"÷"+String.valueOf(d3)+"="); 87 else if (d2<0&&d3>0)Ltimu.setText(String.valueOf(d1)+"+"+String.valueOf(d2)+"÷("+String.valueOf(d3)+")=");break; 88 case 2: 89 if(d2<0&&d3<0)Ltimu.setText(String.valueOf(d1)+"-("+String.valueOf(d2)+")×("+String.valueOf(d3)+")="); 90 else if (d2<0&&d3>0)Ltimu.setText(String.valueOf(d1)+"-("+String.valueOf(d2)+")×"+String.valueOf(d3)+"="); 91 else if (d2>0&&d3>0)Ltimu.setText(String.valueOf(d1)+"-"+String.valueOf(d2)+"×"+String.valueOf(d3)+"="); 92 else if (d2<0&&d3>0)Ltimu.setText(String.valueOf(d1)+"-"+String.valueOf(d2)+"×("+String.valueOf(d3)+")=");break; 93 case 3: 94 if(d2<0&&d3<0)Ltimu.setText(String.valueOf(d1)+"-("+String.valueOf(d2)+")÷("+String.valueOf(d3)+")="); 95 else if (d2<0&&d3>0)Ltimu.setText(String.valueOf(d1)+"-("+String.valueOf(d2)+")÷"+String.valueOf(d3)+"="); 96 else if (d2>0&&d3>0)Ltimu.setText(String.valueOf(d1)+"-"+String.valueOf(d2)+"÷"+String.valueOf(d3)+"="); 97 else if (d2<0&&d3>0)Ltimu.setText(String.valueOf(d1)+"-"+String.valueOf(d2)+"÷("+String.valueOf(d3)+")=");break; 98 case 4: 99 if(d2<0&&d3<0)Ltimu.setText(String.valueOf(d1)+"×("+String.valueOf(d2)+")÷("+String.valueOf(d3)+")="); 100 else if (d2<0&&d3>0)Ltimu.setText(String.valueOf(d1)+"×("+String.valueOf(d2)+")÷"+String.valueOf(d3)+"="); 101 else if (d2>0&&d3>0)Ltimu.setText(String.valueOf(d1)+"×"+String.valueOf(d2)+"÷"+String.valueOf(d3)+"="); 102 else if (d2<0&&d3>0)Ltimu.setText(String.valueOf(d1)+"×"+String.valueOf(d2)+"÷("+String.valueOf(d3)+")=");break; 103 } 104 tid=1;count=0; 105 L2.setText("题目"+tid+": "); 106 } 107 else 108 L5.setText("出题数限制在5以内"); 109 } 110 else 111 L5.setText("错误!!输入数据含有其他字符!"); 112 } 113 114 else if(e.getSource()==B3||e.getSource()==answertxet){ 115 String str=answertxet.getText();L5.setText(""); 116 boolean isAllLetter = true;//定义一个boolean值,用来表示是否不含包含数字 117 for(int i=0 ; i<str.length() ; i++)//循环遍历字符串 118 if(!Character.isDigit(str.charAt(i))){ //用char包装类中的判断数字的方法判断每一个字符 119 isAllLetter = false; 120 } 121 if(isAllLetter){ 122 double a=Double.parseDouble(str); 123 if(jieflag==0){ 124 switch(op) 125 { 126 case 0: 127 if(d1+(d2*d3)==a){ 128 L5.setText("答案正确!请继续做题。"); 129 count++; 130 } 131 else{ 132 L5.setText("答错了!正确答案:"+(d1+d2*d3)); 133 };break; 134 case 1: 135 if(Math.abs(a-((d1+d2)/(double)d3))<0.01){ 136 L5.setText("答案正确!请继续做题。"); 137 count++; 138 } 139 else{ 140 L5.setText("答错了!正确答案为:"+String.format("%.2f", (d1+(double)d2/d3))); 141 };break; 142 case 2: 143 if((d1-(d2*d3))==a){ 144 L5.setText("答案正确!请继续做题。"); 145 count++; 146 } 147 else{ 148 L5.setText("答错了!正确答案为:"+(d1-d2*d3)); 149 };break; 150 case 3: 151 if(Math.abs(a-((d1-d2)/(double)d3))<0.01){ 152 L5.setText("答案正确!请继续做题。"); 153 count++; 154 } 155 else{ 156 L5.setText("答错了!正确答案为:"+String.format("%.2f", (d1-(double)d2/d3))); 157 };break; 158 case 4: 159 if(Math.abs(a-((d1*d2)/(double)d3))<0.01){ 160 L5.setText("答案正确!请继续做题。"); 161 count++; 162 } 163 else{ 164 L5.setText("答错了!正确答案为:"+String.format("%.2f", (d1*(double)d2/d3))); 165 };break; 166 } 167 } 168 else 169 { 170 int i,sum=1; 171 for(i=1;i<=d1;i++){ 172 sum=sum*i; 173 } 174 if(a==sum){L5.setText("答案正确!");} 175 else 176 L5.setText("答错了!正确答案为"+sum); 177 jieflag=0; 178 } 179 } 180 else 181 L5.setText("错误!!输入数据含有其他字符!");} 182 183 184 else if(e.getSource()==B1){ 185 switch(backcolor) 186 { 187 case 0:this.getContentPane().setBackground(Color.red);break; 188 case 1:this.getContentPane().setBackground(Color.black);break; 189 case 2:this.getContentPane().setBackground(Color.white);break; 190 case 3:this.getContentPane().setBackground(Color.yellow);break; 191 case 4:this.getContentPane().setBackground(Color.blue);break; 192 case 5:this.getContentPane().setBackground(Color.GREEN);break; 193 } 194 backcolor++; 195 backcolor=backcolor%6; 196 } 197 else if(e.getSource()==B4){ 198 d1=(int) (Math.random()*10); 199 L2.setText("题目:");Ltimu.setText(d1+"!"); jieflag=1;inputtext.setText("");answertxet.setText("");L5.setText(""); 200 } 201 else if(e.getSource()==B2){ 202 203 if(n>1) 204 { 205 n--; 206 op=(int) (Math.random()*5); 207 d1=(int) (Math.random()*200)-100; 208 d2=(int) (Math.random()*200)-100; 209 d3=(int) (Math.random()*200)-100; 210 switch(op) 211 { 212 case 0: 213 if(d2<0&&d3<0)Ltimu.setText(String.valueOf(d1)+"+("+String.valueOf(d2)+")×("+String.valueOf(d3)+")="); 214 else if (d2<0&&d3>0)Ltimu.setText(String.valueOf(d1)+"+("+String.valueOf(d2)+")×"+String.valueOf(d3)+"="); 215 else if (d2>0&&d3>0)Ltimu.setText(String.valueOf(d1)+"+"+String.valueOf(d2)+"×"+String.valueOf(d3)+"="); 216 else if (d2<0&&d3>0)Ltimu.setText(String.valueOf(d1)+"+"+String.valueOf(d2)+"×("+String.valueOf(d3)+")=");break; 217 case 1: 218 if(d2<0&&d3<0)Ltimu.setText(String.valueOf(d1)+"+("+String.valueOf(d2)+")÷("+String.valueOf(d3)+")="); 219 else if (d2<0&&d3>0)Ltimu.setText(String.valueOf(d1)+"+("+String.valueOf(d2)+")÷"+String.valueOf(d3)+"="); 220 else if (d2>0&&d3>0)Ltimu.setText(String.valueOf(d1)+"+"+String.valueOf(d2)+"÷"+String.valueOf(d3)+"="); 221 else if (d2<0&&d3>0)Ltimu.setText(String.valueOf(d1)+"+"+String.valueOf(d2)+"÷("+String.valueOf(d3)+")=");break; 222 case 2: 223 if(d2<0&&d3<0)Ltimu.setText(String.valueOf(d1)+"-("+String.valueOf(d2)+")×("+String.valueOf(d3)+")="); 224 else if (d2<0&&d3>0)Ltimu.setText(String.valueOf(d1)+"-("+String.valueOf(d2)+")×"+String.valueOf(d3)+"="); 225 else if (d2>0&&d3>0)Ltimu.setText(String.valueOf(d1)+"-"+String.valueOf(d2)+"×"+String.valueOf(d3)+"="); 226 else if (d2<0&&d3>0)Ltimu.setText(String.valueOf(d1)+"-"+String.valueOf(d2)+"×("+String.valueOf(d3)+")=");break; 227 case 3: 228 if(d2<0&&d3<0)Ltimu.setText(String.valueOf(d1)+"-("+String.valueOf(d2)+")÷("+String.valueOf(d3)+")="); 229 else if (d2<0&&d3>0)Ltimu.setText(String.valueOf(d1)+"-("+String.valueOf(d2)+")÷"+String.valueOf(d3)+"="); 230 else if (d2>0&&d3>0)Ltimu.setText(String.valueOf(d1)+"-"+String.valueOf(d2)+"÷"+String.valueOf(d3)+"="); 231 else if (d2<0&&d3>0)Ltimu.setText(String.valueOf(d1)+"-"+String.valueOf(d2)+"÷("+String.valueOf(d3)+")=");break; 232 case 4: 233 if(d2<0&&d3<0)Ltimu.setText(String.valueOf(d1)+"×("+String.valueOf(d2)+")÷("+String.valueOf(d3)+")="); 234 else if (d2<0&&d3>0)Ltimu.setText(String.valueOf(d1)+"×("+String.valueOf(d2)+")÷"+String.valueOf(d3)+"="); 235 else if (d2>0&&d3>0)Ltimu.setText(String.valueOf(d1)+"×"+String.valueOf(d2)+"÷"+String.valueOf(d3)+"="); 236 else if (d2<0&&d3>0)Ltimu.setText(String.valueOf(d1)+"×"+String.valueOf(d2)+"÷("+String.valueOf(d3)+")=");break; 237 } 238 tid++; 239 L2.setText("题目"+tid+": "); 240 answertxet.setText("");L5.setText(""); 241 } 242 else 243 L5.setText("题目已答完,答对"+count+"题,答错"+(number-count)+"题"); 244 } 245 } 246 }
开发环境:Eclipse。本来我也是用VC++做的四则运算,但由于要生成用户界面,在c中没学过,所以只能在学过的Java所运行的平台上做了。
实现时间:比原来想的时间短了,本来以为要用一周的时间去完成,但实际上确用了2天左右去完成,可能是因为结对编程的好处吧。第一次结对编程,很多东西都要分配好时间和任务,有时也有各执己见,认为某个方法该用哪个等,但两个人一起结对编程确实能够提高效率,有效的采用了两个人的思想去做这个程序
结对同伴:王逸辉、学号:201306114334 博客地址:http://www.cnblogs.com/wyh624945780/ 在这个结对编程过程中,我主要做的是四则运算的加减乘除的题目生成,保留两位数以及答对多少题目等等,我的同伴负责做窗口的布局,换背景颜色功能,还有阶乘部分,我们是共同完成答案的对错判断的。
收获到和感悟:我承认我们两个都是有缺点的,但是拥有一样的缺点却可以说是没有的,我们互相交流好的想法以及讨论如何去解决这个功能实现或bug问题。我发现结对编程存在一点:使我们两都提高了积极性和效率。如果是单独工作的话,在遇到问题的时候,有可能不会积极地去解决问题,这时候或许会去上网看看视频,看看无关的网站等等。而两个人在一起结对编程,就会去讨论该怎么样去解决
扩展的方向: 1.可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。如: 2*(-4) = -8 2.用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数 3.程序可以出单个整数阶乘的题目:如:4!=24 4.程序可以设置皮肤功能,可以改变界面的颜色即可。