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