结对编程第二阶段

一、实验目标

  1)体验敏捷开发中的两人合作。

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

二 、实验内容

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

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

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

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

三、具体内容

1、代码规范

代码规范采用阿里规约,具体如下:

  1. 方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格,必须遵从驼峰形式。
  2. 常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。
  3. 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。
  4. 注释的双斜线与注释内容之间有且仅有一个空格。
  5. Object 的 equals 方法容易抛空指针异常,应使用常量或确定有值的对象来调用 equals。
  6. 集合初始化时,指定集合初始值大小。
  7. 需要进行参数校验。
  8. 类、类属性、类方法的注释必须使用 Javadoc 规范,使用/**内容*/格式。

2、程序的总体设计(附图说明模块之间的关系)

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

3、程序结对编程过程(附图)及功能实现情况(附代码和图)

过程

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

功能

初始化界面

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

完成正确输入

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

完成错误输入

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

控制台版本

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

源代码

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();
//		}
//	}
	
	

}

4、项目github地址(附图)
我们的github主页
结对编程第二阶段_第8张图片

结对编程第二阶段_第9张图片

5、实验总结
通过本次实验,让我对结对编程有了从简单认识到深入实战操作的体验,并且由于不在一起面对面编程,不能有什么问题都可以得到及时沟通,这为实验过程带来了许多不便,但好在GitHub远程仓库的使用以及QQ等软件的运用,让我和我的搭档有了职业程序员的结对编程的感觉,总的来说本次实验困难还是比较多的,但是克服这些困难的后的欣喜油然而生。同时,在使用Java制作图形界面的时候,遇到了一些困难,虽然程序的功能可以在控制台很好的表现和输出,但是想让各种运行结果,按照设想输出在图形界面上,遇到了一些挑战,但是在网络和同学的帮助下,我逐渐解决了这些问题。目前的图形版程序依然又不够完善的地方,但我们会在将来的版本中,逐渐完善这些功能。

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