结对编程实现小学四则运算

 

结对编程实现四则运算

  •     前言按照结对编程的原则,我和小组另一个成员进行了两人进行了结对编程,我们开发的结对项目的是小学的四则运算,具体就是随机生成30道题,供学生答题并返回正误。经过讨论,我们将采用Java的图形化界面完成,分工为两部分,一人负责四则运算的产生,一个界面以及运算后的界面。

  •     功能:实现用户输入的数量,随机产生四则运算,用户输入答案,判断用户输入的正误并记录如一张表供用户查询。

  • 下面是具体的代码及演示:

四则运算式的产生:(向外提供四则运算式String类借口、提供正确的答案以及各个运算符与运算式)Out.java

 

 1 package com.cxy;
 2 
 3 import java.util.Random;
 4 
 5 public class Out {
 6     private int a, b;
 7     private int i;
 8     private String operator[]={"+","-","×","÷"};
 9     
10     public String getYun(){
11       while(true){
12         a=new Random().nextInt(100);
13         b=new Random().nextInt(100);  //产生随机数
14         i=new Random().nextInt(4);
15         
16         if(i==1&&a<b){         //不能为负数
17             continue;
18         }
19         
20         if(i==3){             //不能被0除
21             if(b==0){
22                 continue;
23             }
24             if(a%b!=0){      //a一定被b除
25                 continue;
26             }
27         }
28         break;       
29       }
30       return new String(a+operator[i]+b+"=");
31     }
32     
33     
34     public  boolean panduan(String s){    //判断答案是否正确
35         int i,result = 0;
36         try{
37             i=Integer.valueOf(s).intValue();
38         }catch(Exception e){
39             return false;
40         }
41         switch(this.operator()){
42            case "+":result=this.getA()+this.getB();break;
43            case "-":result=this.getA()-this.getB();break;
44            case "×":result=this.getA()*this.getB();break;
45            case "÷":result=this.getA()/this.getB();break;
46         }
47         if(result==i){
48             return true;
49         }return false;
50         
51     }
52     
53     public int correctResult(){     //返回正确的答案
54         int result=0;
55        switch(this.operator()){
56         case "+":result=this.getA()+this.getB();break;
57         case "-":result=this.getA()-this.getB();break;
58         case "×":result=this.getA()*this.getB();break;
59         case "÷":result=this.getA()/this.getB();break;
60      }
61        return result;
62     }
63     
64     
65     public String operator(){        //返回运算符
66         return operator[this.i];
67     }
68     
69     
70     public int getA() {  //返回运算数
71         return a;
72     }
73 
74 
75     public int getB() { //返回运算数
76         return b;
77     }
78     
79 }

 

  • 下面是界面以及各个控件的布局与事件处理
  • 具体实现:用户先输入需要的题数,然后显示第一个四则运算,用户输入结果,软件判断正误并记录,显示用户剩余的题数以及目前正确率,然后显示第二个四则运算循环一直达到用户需要的题数。

  • 代码如下:

 

  1 package com.cxy.jg;
  2 
  3 import java.awt.BorderLayout;
  4 import java.awt.Color;
  5 import java.awt.Container;
  6 import java.awt.FlowLayout;
  7 import java.awt.GridLayout;
  8 import java.awt.event.ActionEvent;
  9 import java.awt.event.ActionListener;
 10 
 11 import javax.swing.DefaultListModel;
 12 import javax.swing.JButton;
 13 import javax.swing.JFrame;
 14 import javax.swing.JLabel;
 15 import javax.swing.JList;
 16 import javax.swing.JPanel;
 17 import javax.swing.JScrollPane;
 18 import javax.swing.JTextField;   //引入相关的包
 19 
 20 public class Ui {
 21     
 22     
 23     
 24     public static JScrollPane jls;
 25     public static int correct=0;
 26     public static int number=0;
 27     public static int total=0;
 28     public static boolean flag=false;
 29     public static JTextField count;
 30         public static JButton btn_ok;
 31         public static JButton btn_xuan;
 32         public static JLabel operate;
 33         public static JTextField result;
 34         public static JLabel info;
 35         public static JList infoList;         //声明各种控件
 36     public static DefaultListModel dlm = new DefaultListModel();
 37     public static Out out=new Out();
 38      
 39     public static boolean panduan(String s){   //判断用户输入的题数是否是整数且在1-100的范围内
 40         int i;
 41         try
 42         {
 43             i=Integer.valueOf(s).intValue();
 44         }catch(Exception e){
 45             return false;
 46         }
 47         if(i<=0||i>100)
 48         {
 49               return false;
 50         }        
 51         return true;
 52     } 
 53     
 54     public static void main(String[] args) {
 55         // TODO Auto-generated method stub
 56          JFrame frame=new JFrame("四则运算");
 57          Container contentPane=frame.getContentPane();
 58          
 59          contentPane.setLayout(new GridLayout(2,1));  //界面布局
 60          
 61          JPanel panel_top=new JPanel();
 62          panel_top.setLayout(new BorderLayout());
 63          
 64          
 65          
 66          JPanel panel_one=new JPanel(new FlowLayout(FlowLayout.LEFT));  
 67          count=new JTextField(5);
 68          btn_xuan=new JButton("确定");
 69          btn_xuan.addActionListener(new ActionListener(){
 70 
 71             @Override
 72             public void actionPerformed(ActionEvent e) {
 73                 // TODO Auto-generated method stub
 74             
 75                 
 76                 if(Ui.panduan(Ui.count.getText())){
 77                     Ui.out=new Out();
 78                     Ui.correct=0;
 79                     Ui.total=Ui.number=Integer.valueOf(Ui.count.getText()).intValue();
 80                     Ui.flag=true;
 81                     Ui.btn_ok.setEnabled(true);
 82                     Ui.result.setEnabled(true);
 83                     Ui.btn_xuan.setText("重新生成");
 84                     
 85                     Ui.operate.setText(Ui.out.getYun());
 86                     Ui.info.setText("你还剩余"+Ui.number+"道题,你已经答对"+Ui.correct+"道题"+",你目前的正确率为"+new java.text.DecimalFormat("00.0%").format(((Ui.correct*1.0)/Ui.total)));
 87                     Ui.dlm.clear();
 88                     Ui.infoList.setModel(Ui.dlm);
 89                 }
 90             }
 91                    
 92          });   //确定题数按钮事件的处理
 93          panel_one.add(new JLabel("产生题目数:"));
 94          panel_one.add(count);
 95          panel_one.add(btn_xuan);
 96          panel_one.add(new JLabel("1-100"));
 97          
 98          
 99          
100          JPanel panel_second=new JPanel(new FlowLayout(FlowLayout.LEFT));
101          operate=new JLabel("0+0=");  
102          result=new JTextField(5);
103          result.setEnabled(false);
104          btn_ok=new JButton("提交");
105          btn_ok.addActionListener(new ActionListener(){
106 
107             @Override
108             public void actionPerformed(ActionEvent e) {
109                 // TODO Auto-generated method stub
110                 StringBuffer s=new StringBuffer();
111                 if(Ui.out.panduan(Ui.result.getText())){
112                     Ui.correct++;
113                     Ui.number--;
114                     
115                     s.append(Ui.out.getA()).append(Ui.out.operator()).append(Ui.out.getB()+"=").append(Ui.result.getText()).append("\t").append("   √    ");
116                     
117                 }else{
118                     Ui.number--;
119                     s.append(Ui.out.getA()).append(Ui.out.operator()).append(Ui.out.getB()+"=").append(Ui.result.getText()).append("\t").append("   ×    ").append(Ui.out.correctResult());
120                     
121                 }
122                 Ui.info.setText("你还剩余"+Ui.number+"道题,你已经答对"+Ui.correct+"道题"+",你目前的正确率为"+new java.text.DecimalFormat("00.0%").format(((Ui.correct*1.0)/Ui.total)));
123                 if(Ui.number==0){
124                      Ui.btn_ok.setEnabled(false);
125                      Ui.info.setForeground(Color.red);
126                      Ui.info.setText("恭喜你!你总共完成"+Ui.total+"道题"+",你的答题正确率为"+new java.text.DecimalFormat("00.0%").format(((Ui.correct*1.0)/Ui.total)));
127                      
128                 }
129                 
130                 Ui.dlm.addElement(s);
131                 Ui.infoList.setModel(Ui.dlm);
132                 
133                 Ui.out=new Out();
134                 Ui.operate.setText(Ui.out.getYun());
135             
136             }
137              
138          }); //提交结果按钮事件处理
139          Ui.operate.setForeground(Color.BLUE);
140          
141          btn_ok.setEnabled(false);
142          panel_second.add(new JLabel("         运算:"));       
143          panel_second.add(operate);
144          panel_second.add(result);
145          panel_second.add(btn_ok);
146          
147          
148          
149          
150          JPanel panel_third=new JPanel(new FlowLayout(FlowLayout.LEFT));
151          info=new JLabel("");
152          panel_third.add(new JLabel("提示:"));
153          panel_third.add(info);
154          
155         
156          infoList=new JList();
157          jls=new JScrollPane(infoList);
158          
159          panel_top.add(panel_one,BorderLayout.NORTH);
160          panel_top.add(panel_second,BorderLayout.CENTER);
161          panel_top.add(panel_third,BorderLayout.SOUTH);
162          
163          contentPane.add(panel_top);
164          contentPane.add(jls);
165          frame.setSize(450, 500);
166          frame.setVisible(true);
167     }
168 
169 
170 }

 

  • 运行展示

 

  • 收获:

           这次与另外同学的结对编程,发现自己某些方面的不足,某些考虑不全面,有时候同学都可以一针见血的指出,同时两个人同时编程感觉更高效考虑的更全面,如果是很多人同时开发,几个人之间的沟通就成很大问题,不一定就有结对编程的效率高。

 

posted @ 2016-03-16 15:45  鱼儿游上天  阅读(438)  评论(0编辑  收藏  举报