实验二 结对编程 第二阶段

Posted 99xinyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验二 结对编程 第二阶段相关的知识,希望对你有一定的参考价值。


一、实验目标
  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共屏的运用使得近似面对面编程。大体上来说,第一次结对编程让我收获很多,和队友的协作也很开心,当然对于许多不足,以后还会继续改善。

 

 

 

 

 

以上是关于实验二 结对编程 第二阶段的主要内容,如果未能解决你的问题,请参考以下文章

结对编程(第二阶段)

实验二 结对编程 第二阶段

实验二 结对编程 (第二阶段)

实验二 结对编程 第二阶段

实验二 结对编程 第二阶段

实验二结对编程 第二阶段