zoukankan      html  css  js  c++  java
  • 结对编程第二阶段

    一、实验目标

      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、程序的总体设计(附图说明模块之间的关系)

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

    过程

    功能

    初始化界面

    完成正确输入

    完成错误输入

    控制台版本


    源代码

    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主页

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

  • 相关阅读:
    【Stage3D学习笔记续】山寨Starling(十):高效游戏设计、纹理集和ATF
    【Stage3D学习笔记续】山寨Starling(九):上下文丢失处理方法
    【Stage3D学习笔记续】山寨Starling(八):核心优化(批处理)的实现
    echarts 百度图表
    java读properties文件 乱码
    百度地图 JSAPI使用 mark 定位地址 与周边覆盖物
    jstl format date
    MultipartEntity 乱码
    log4j与commons-logging,slf4j的关系
    maven 引入 net sf jsonlib 报错 has borken path
  • 原文地址:https://www.cnblogs.com/zhiless/p/12640255.html
Copyright © 2011-2022 走看看