第二次作业-结对编程

课程:构建之法

姓名学号:骆炳岑1759214   陆心妍:1759209

一 . 项目简介

ppt上所给题目如下图

 

A方案:输入所需要的算式个数,自动生成算式

B方案:用户手动输入数字、运算符,显示计算结果

沟通后认为A方案更贴切题目,意见统一后开始合作(同时陆心妍也完成了B方案的代码,见本文章末)

二 . 合作流程

1.项目目标

(1)初步掌握结对编程的方式过程

(2)编写小学四则运算测试系统,要求完成100以内的加,减,乘,除四则运算(两个运算符)

2.项目需求

(1)写出合作流程及发生的问题,矛盾,解决心得

(2)所有四则运算表达式均需随机生成

(3)用户可控制算式个数

(4)生成的题目中计算过程不能产生负数

(5)依次生成每一条表达式时,检索是否与前面生成的表达式重复

3.PSP表格

PSP2.1

Personal Software

Process Stages

预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 45
Analysis 需求分析  40 60
Design Review 设计复审 (和同伴审核设计文档) 30 45
Coding Standard · 代码规范 (为目前的开发制定合适的规范) 20 25
Design 具体设计 60 120
Coding 具体编码 120 200
Code Review 代码复审 30 30
Test 测试(自我测试,修改代码,提交修改) 100 130
Reporting 报告 60 90
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 30 45
  合计 520 790

 

4.设计思路

(1)算式本身分成四个部分(实现)

     随机100以内的数e1

    ‘+’‘-’‘*’‘/’的随机产生y(用数组实现)

     随机100以内的数e2 

    ‘= 

(2)使用参数控制生成题目的数量(实现)

(3)依次生成每一条表达式时,用数字做标记,检索之后生成的算式是否重复

(4)判断是否为减法且判断e1>e2?是则保留,否交换位置(实现)

三 . 代码及截图

package 四则运算;
import java.util.*;
public class test {
    private static Scanner sc;

    public static void main(String [] args) {
        int e1,e2,t;
        String y;
    System.out.println("你要计算的式子个数:");
    sc = new Scanner(System.in );
    int count=sc. nextInt();
    String[] str=new String[] {"+","-","x","/"}; 
    //第一个随机数
    int[] a=new int[100];
    for(int i=1;i<=100;i++) {
         a[i-1]=i;
    }
    //第二个随机数
    int[] b=new int[100];
    for(int i=1;i<=100;i++) {
         b[i-1]=i;
    }
    
    Random r=new Random();
    for(int i=0; i<count;i++) {
         e1=a[r.nextInt(100)];
         y=str[r. nextInt(4)];
         e2=b[r.nextInt(100)];
    
         //当为减法且被减数小于减数时,被减数与减数交换位置
            if(y=="-" ) {
                if(e1<e2) {
                    t=e1;
                    e1=e2;
                    e2=t;
                }
            }
        
        //输出式子    
        System.out.println(e1+y+e2+"=");
    }
   
    
    }

}

四 . 心得

骆炳岑:两人是第一次参与结对编程的项目,对于合作项目来说队友真的非常重要,虽然中间有过意见不合但能很快找出最佳方案化解问题,合作非常愉快。在此次此项目中,发现自己还有很多不足,基础还不是很扎实,还需多多练习。

陆心妍:结对编程真的会带来1+1>2的效果吗?

对我们来说,结对编程的确有很大的帮助。我编写的程序需要用户手动输入数字、运算符,按照老师的题目要求“给同学出300道计算题”,这样会耗费很多的时间。而骆炳岑的程序则可以自动完成,虽然程序有点小问题,但经过我们的讨论、摸索,程序基本可以完成题目要求。如此,结对编程帮助我们加深对代码的理解,编写出更完善的代码。

五 . 另附 B方案代码

说明:需要用户手动输入,耗费较多时间成本、人力成本。

import java.text.DecimalFormat;
 import java.util.Scanner;
public class JS {
    public static void main(String[] args) 
      {        String condition = "";        JS jisuan  = new JS();        
     do{        Scanner scanner = new Scanner(System.in);        
     try{        System.out.print("请输入第一个数:");        
     double x = scanner.nextDouble();        
     System.out.print("请输入第二个数:");        
     double y = scanner.nextDouble();        
     System.out.print("请输入运算符:");        
     String s = scanner.next();        
     char z = s.charAt(0);        
     Jisuan.suan(x, y, z);        }
     catch(Exception e){            System.out.println("请输入正确的数据!");        }        
     System.out.print("是否继续?continue:继续,任意字符:结束");        condition = scanner.next();            }
     while("continue".equals(condition));    }   

     
     public static void suan(double x,double y,Character z)
    {        DecimalFormat r=new DecimalFormat();         r.applyPattern("#0.00");        if(z.equals('+'))
    {            System.out.println(x+"+"+y+"=" + r.format((x+y)));        } else if(z.equals('-'))
    {            System.out.println(x+"-"+y+"=" + r.format((x-y)));        } else if(z.equals('*'))
    {            System.out.println(x+"*"+y+"=" + r.format((x*y)));        } else if(z.equals('/'))
    {            if(y==0){                System.out.println("被除数不能为0");            } 
    else{                System.out.println(x+"/"+y+"=" + r.format((x/y)));            }            }
    else{            System.out.println("无法识别改运算符");        }    }
}

 

猜你喜欢

转载自www.cnblogs.com/llbc/p/10556117.html