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