实验二 结对编程 第二阶段


一、实验目标
  1)体验敏捷开发中的两人合作。

  2)进一步提高个人编程技巧与实践。

二 、实验内容
  1)根据以下问题描述,练习结对编程(pair programming)实践;

  2)要求学生两人一组,自由组合。每组使用一台计算机,二人共同编码,完成实验要求。

  3)要求在结对编程工作期间,两人的角色至少切换 4 次;

  4)编程语言不限,版本不限。建议使用 Python 或 JAVA 进行编程。

三、实验过程

  1、程序的总体设计流程图

    实验二 结对编程 第二阶段_第1张图片

 

 

 

  2、代码编写规约

    (1)方法名、参数名、成员变量、局部变量都统一 风格,必须遵从驼峰形式。

    (2)常量命名全部大写,单词间用下划线隔开。

    (3)代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。

    (4)注释的双斜线与注释内容之间有且仅有一个空格。

    (5)Object 的 equals 方法容易抛空指针异常,应使用常量或确定有值的对象来调用 equals。

    (6)集合初始化时,指定集合初始值大小。

    (7)需要进行参数校验。

    (8)类、类属性、类方法的注释必须使用 Javadoc 规范,使用/**内容*/格式。

  3、程序结对编程过程及功能实现情况

    (1)结对编程过程:

     利用共用的远程仓库实现和本地代码仓库的同步更新,通过fork对方的仓库进行代码的交流与更改,最后发送pull request请求,进行信息的合并。

    (2)源代码

    

    test.java(for console version)

    package cy;

    import java.util.Scanner;

    public class test {     private static int score = 0;     public static void main(String[] args) { // TODO Auto-generated method stub     // char[] operator = new char[5];     // operator[] = {'+', '-', '*', '/'};     int count = 1;     Scanner sc = new Scanner(System.in);     System.out.println("这是四则运算小游戏,你将得到十个题目,每个题目1分,满分10分,祝你好运");     while(count <= 10) {     String operator = getOperator();     int num1 = (int)(Math.random()*(100-1)+1);     int num2 = (int)(Math.random()*(100-1)+1);     if(judgeEquation(num1, num2)) {     System.out.println("第"+count+"题");     System.out.print(num1 + operator + num2 +"=");     int res = sc.nextInt();     judgeResult(num1, num2, operator, res);     System.out.println();     count ++;     }         }     System.out.println("游戏结束,你的得分是:"+score+"分");     }     //***获取符号***     public static String getOperator() {     char[] operator=new char[]{'+','-','*','/'};     int num = (int) (Math.random()*(4-0)+0);     //   int s= random.nextInt(4);     return String.valueOf(operator[num]);     }     //***判断范围是否在要求范围内***     public static boolean judgeEquation(int num1, int num2) {     if(num1 + num2 >= 100 || num1 * num2 >= 100) {        return false;     }     if(num1 - num2 < 0) {     return false;     }     if(num1 % num2 != 0) {     return false;     }     return true;     }     //***判断运算结果***     public static boolean judgeResult(int num1, int num2, String operator, int res) {     int result = 0;     switch(operator) {     case "+":     result = num1 + num2;     break;     case "-":     result = num1 - num2;     break;     case "*":     result = num1 * num2;     break;     case "/":     result = num1 / num2;     break;     }     if(res == result) {     System.out.println("√");     score ++;     return true;     }     else {     System.out.println("×");        return false;     }     }     } 

    equationExe.java(for getting random numbers and operators and calculating results)

    package cy;


    //***获得算式***
    public class equationExe {     private static String equation;     public static int res1 = 0;     public static String getEquation() {     do {     int num1 = (int)(Math.random()*(100-1)+1);     int num2 = (int)(Math.random()*(100-1)+1);     String operator = test.getOperator();     String equation = num1 + operator + num2 +"="; //方便后续调用     if(test.judgeEquation(num1, num2)) {     res1 = getResult(num1, num2, operator);     return equation;     }     }while(equation == null);     return null;     }     public static int getResult(int num1, int num2, String operator) {     int result = 0;     switch(operator) {     case "+":     result = num1 + num2;     break;     case "-":     result = num1 - num2;     break;     case "*":     result = num1 * num2;     break;     case "/":     result = num1 / num2;     break;     }     return result;     // if(res == result) {     // System.out.println("√");     // score ++;     // return true;     // }     // else {     // System.out.println("×");     // return false;     // }     }     } 

    view.java(GUI)

    package cy;


    import java.awt.Color;
    import java.awt.Container;
    import java.awt.Font;
    import java.awt.event.ActionEvent;     import java.awt.event.ActionListener;     import javax.swing.JButton;     import javax.swing.JFrame;     import javax.swing.JLabel;     import javax.swing.JTextField;     public class view extends JFrame{     //创建窗口     public view() {     System.out.println(equationExe.getEquation());     setTitle("四则运算小游戏");     setBounds(100, 100, 500, 300);     setDefaultCloseOperation(EXIT_ON_CLOSE);     Container c = getContentPane();     c.setLayout(null);     c.setBackground(Color.WHITE);     //生成组件     JLabel jl1 = new JLabel("请计算:");     JLabel jl2 = new JLabel(equationExe.getEquation());     // JLabel jl3 = new JLabel("*");     // JLabel jl4 = new JLabel("100");      JLabel jl5 = new JLabel("");     JTextField jt = new JTextField();     //添加提示     jl1.setBounds(20, 20, 150, 50);     jl1.setFont(new Font("黑体",Font.PLAIN,20));     c.add(jl1);     //设置算式     jl2.setBounds(20, 50, 100, 100);     jl2.setFont(new Font("黑体",Font.PLAIN,20));     c.add(jl2);     //添加输入框     jt.setBounds(90, 90, 50, 25);     jt.setFont(new Font("黑体",Font.PLAIN,20));     c.add(jt);     //添加确认按钮,绑定事件,定义分数     JButton btn1 = new JButton("Confirmed!");     btn1.setBounds(20, 125, 100, 25);     btn1.addActionListener(new ActionListener() {     public void actionPerformed(ActionEvent e) {     System.out.println(jt.getText());     int res = Integer.valueOf(jt.getText());     if(res == equationExe.res1) {     System.out.println("√");     jl5.setText("√");     }     else {     System.out.println("×");     jl5.setText("×");     }     jl5.setFont(new Font("黑体",Font.PLAIN,20));     jl5.setBounds(150, 90, 25, 25);     c.add(jl5);     jl5.setVisible(true);     }     });     //添加取消按钮     JButton btn2 = new JButton("Cancelled!");     btn2.setBounds(150, 125, 100, 25);     btn2.addActionListener(new ActionListener() {     public void actionPerformed(ActionEvent e) {     jt.setText("");     }     });     c.add(btn1);     c.add(btn2);     setVisible(true);     }     public static void main(String[] args) {     new view();     }     // public static boolean Judge() {     // int res = Integer.valueOf(view.jt.getText());     // if(res == equationExe.res1) {     // getScore();     // }     // }     }

    

    (3)实现情况截图

实验二 结对编程 第二阶段_第2张图片

 

 

 

      输入正确结果

实验二 结对编程 第二阶段_第3张图片

      输入错误结果

 实验二 结对编程 第二阶段_第4张图片

      控制台版本

 实验二 结对编程 第二阶段_第5张图片   实验二 结对编程 第二阶段_第6张图片

 

 

  4、项目github地址

    共用地址:https://github.com/yuanyuan0931/homeworkillers.git

实验二 结对编程 第二阶段_第7张图片

 

 

 四、实验总结

    通过本次结对编程让我体验不同形式的编程方式,同时让我对职业程序员的工作有了新的认识。当然是由于第一次进行完全线上的协作编程,在感到新鲜的同时,也遇到了以往不一样的问题,并且不能像面对面一样及时沟通解决。但幸好有GitHub的远程仓库使用,方便两人编程协作,以及QQ共屏的运用使得近似面对面编程。大体上来说,第一次结对编程让我收获很多,和队友的协作也很开心,当然对于许多不足,以后还会继续改善。

 

 

 

 

 

你可能感兴趣的:(实验二 结对编程 第二阶段)