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

结对编程实现四则运算

  • 前言:按照结对编程的原则,我和小组另一个成员进行了两人进行了结对编程,我们开发的结对项目的是小学的四则运算,具体就是随机生成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 }
  • 运行展示

  • 收获:

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

时间: 2025-01-15 19:59:51

结对编程实现小学四则运算的相关文章

20165234 结对编程练习_四则运算

结对编程练习_四则运算 1.栈的一个应用是用来对四则运算表达式进行求值.规则如下: 操作数之间的相对次序不变; 运算符的相对次序不同; 中缀式丢失了括弧信息,致使运算次序不确定; 前缀式的运算规则为:连续出现的两个操作数和在它们之前且紧靠它们的运算符构成一个最小表达式; 后缀式的运算规则为:运算符在式中出现的顺序恰为表达式的运算顺序;每个运算符和在它之前出现且紧靠它的两个操作数构成一个最小表达式. 后缀表示法是波兰逻辑学家J.Lukasiewicz于1929年提出的,又叫做逆波兰表达式. 2.L

结对编程练习_四则运算(第一周)

结对编程项目-四则运算 (第一周) 题目需求 编程,实现一个能进行(加.减.乘.除)的命令行程序. 题目分析 本题要求一个能够实现加减乘除的程序. 首先有四种情况,需要用到else-if语句; 并且从命令行输入运算的数字以及运算符,需要定义数字的类型以及运算符类型; 最终将结果输出. 设计思路 加.减.乘.除四种运算,一开始的输入我调用了Scanner实例,不同运算用else-if语句来实现,先让用户输入一个数,然后选择一种运算方式,接着再输入一个数,最后得出结果.并利用循环加上一do-whil

20165315 结对编程练习_四则运算(阶段总结)

20165315 结对编程练习_四则运算(阶段总结) 需求分析 对需求的理解 支持真分数的四则运算 支持多运算符 能手动输入n道题目,n由使用者输入 后续拓展的可能 能随机生成n道题目,n由使用者输入 能够判断正误,错误时能提醒并输出正确答案 能计算出正确率 能多次生成题目,直到使用者选择退出 题目去重 处理生成题目并输出到文件 完成题目后从文件读入并判题 多语言支持:简体中文, 繁體中文, English 设计思路 先从键盘输入生成题目数,进入循环,从键盘输入算式,利用ChangeExpres

20165210 结对编程练习:四则运算(二)

20165210 结对编程练习:四则运算(二) 题目需求: 四则运算: 自动生成 要求有加减乘除 支持真分数 统计正确率 需求分析: 首先我们可以把除法和分数归为一类 有一个类进行随机生成数 有一个类进行随机生成符号 主类进行四则运算和统计正确率 四则运算的计算式 分数的计算式 设计思路: 原文地址:https://www.cnblogs.com/lyklyk/p/8910285.html

20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结

20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结 结对伙伴 学号 :20172307 姓名 :黄宇瑭 伙伴第一周博客地址: 需求分析 功能要求 1.自动生成题目 可独立使用(能实现自己编写测试类单独生成题目的功能) 可生成不同等级题目,类似于: 1级题目:2 + 5 =: 10 - 5 = 之类的两个数,一个运算符的题目 2.题目运算(判题) 可独立使用 实现中缀表达式转为后缀表达式并计算 判断用户答题正误,并输出正确结果 3.支持真分数 可独立使用 实现分数算式的

2017-2018-2 1723 『Java程序设计』课程 结对编程练习_四则运算

2017-2018-2 1723 『Java程序设计』课程 结对编程练习_四则运算 组内成员 20172327 马瑞蕃 20172320 李闻洲 20172317 蒋子行 需求分析 自动生成题目 可独立使用(能实现自己编写测试类单独生成题目的功能) 可生成不同等级题目 不同等级的题目应该指的是不同难度的题目,意味着题目的复杂程度随着等级的上升而上升 题目运算(判题) 可独立使用 实现中缀表达式转为后缀表达式并计算 自动生成的题目要先转为后缀表达式,并计算这个后缀表达式 判断用户答题正误,并输出正

20172319 结对编程练习_四则运算第一周阶段性总结

20172319 2018.04.23-05.02 结对编程练习_四则运算 第一周阶段性总结 目录 结对对象 需求分析 设计思路 结对评价 PSP 参考资料 结对对象: 20172316赵乾宸(驾驶,领航员) 20172319唐才铭(驾驶,领航员) 20172319王文彬(驾驶,领航员) 返回目录 需求分析: 1.项目内容 以结对小组形式编写代码,实现以下功能: 1.自动生成题目 可独立使用(能实现自己编写测试类单独生成题目的功能) 可生成不同等级题目,类似于: 1级题目:2 + 5 = 10

172328 结对编程练习_四则运算 第一周 阶段总结

172328 结对编程练习_四则运算 第一周 阶段总结 1.项目内容解析 (1).自动生成不同的题目 (2).实现中缀表达式→后缀表达式 (3).支持真分数 (4).题目去重 (5).用户选择题目等级和题目数量 (6).给用户计算正确率 (7).错误处理测试,非法表达式 (8).分数化简 2.设计思路内容 (1).先进行了小组讨论,对于整个题目进行了大体的分析和要点记录. (2).确定了几个必有的模块,生成题目类,用户使用类,中缀表达式变后缀表达式类,后缀表达式计算类. (3).对于每个模块的实

20172301 结对编程练习_四则运算 第一周 阶段总结

20172301 结对编程练习_四则运算 第一周 阶段总结 1.项目内容设计 自动生成题目 可独立使用(能实现自己编写测试类单独生成题目的功能) 可生成不同等级题目,类似于: ???? 1级题目:2 + 5 = ???? 10 - 5 = ???? 之类的两个数,一个运算符的题目 题目运算(判题) 可独立使用 实现中缀表达式转为后缀表达式并计算 判断用户答题正误,并输出正确结果 支持真分数 可独立使用 实现分数算式的计算 题目去重(扩展需求,加分项) 可独立使用 实现对自动生成表达式的去重:如下