• 实验二 结对编程 第二阶段



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

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

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

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

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

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

    三、实验过程

      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)实现情况截图

          输入正确结果

          输入错误结果

     

          控制台版本

        

      4、项目github地址

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

     四、实验总结

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

  • 相关阅读:
    编译安装mysql-5.6.36
    MYSQL数据库基础篇
    MYSQL数据库初学者必看
    Centos7下安装与卸载Jdk1.8
    Linux与Window之间的上传与下载
    MySQL主从搭建
    zabbix通过插件percona进行监控MySQL
    suse系统关闭防火墙
    编译安装zabbix3.0
    centos7安装tomcat
  • 原文地址:https://www.cnblogs.com/99xinyu/p/12640367.html
Copyright © 2020-2023  润新知