结对编程练习_四则运算(二)

一.结对对象
结对学号:20175120
姓名:彭宇辰
结对伙伴博客:https://home.cnblogs.com/u/1751-pyc
结对宣言:成功是无数次失败的结果
二.结对贡献
我们两个人互相帮助,互相扶持,在无数次碰壁中寻求方法,虽然过了交作业的时间,但是还是最终出来了。
三.程序运行截图
1274162-20190416204659003-677732954.png

这个不兼容类型困扰了我们很久,也是这次作业迟交的最主要的原因。
1274162-20190416205115798-1386121933.png

这是一次不完美的运行,只能进行整数的运算,且没有提示,真分数的运算还不能实现
1274162-20190416205209464-1732282076.png

这是进行整数运算的成功结果
1274162-20190416205238459-2102233166.png

这是真分数计算的运行结果

四.代码解释
在一个驱动类test里可以测试两个类,一个是随机生成整数题目的leveltest类,另一个是随机生成真分数型题目的fenshu类
leveltest类代码如下:
import java.util.*;
import java.util.Random;
import java.util.Scanner;

public class levelclass {
public levelclass(){
char[] operator = new char[]{'+', '-', '*', '÷'};
Random random = new Random();
Scanner scan = new Scanner(System.in);
int num;
int level;
System.out.println("该程序只能计算一到五个操作符的算式。");
System.out.println("输入你需要测试的算式等级:");
level = scan.nextInt();
System.out.println("输入你需要的式子数量:");
num = scan.nextInt();
switch (level)
{
//一级算式
case 1:

            ArrayList<String> expression1 = new ArrayList<String>();
            for (int i = 0; i < num; i++) {
                int n = random.nextInt(1) + 1; //1个运算符
                int[] number = new int[n + 1];
                String ex = new String();

                for (int j = 0; j <= n; j++) {
                    number[j] = random.nextInt(100) + 1; //2个数字
                }
                for (int j = 0; j < n; j++) {
                    int s = random.nextInt(4);//随机选择某个运算符

                    ex += String.valueOf(number[j]) + String.valueOf(operator[s]);
                    if (s == 3) {
                        number[j + 1] = decide(number[j], number[j + 1]);
                    }
                }
                ex += String.valueOf(number[n]);
                ex += "=";
                expression1.add(ex);


            }
            for(int ii = 0; ii < expression1.size() ; ii++)
            {
                System.out.print(expression1.get(ii) + "\n");
            }

// System.out.println(expression1);
break;
}

private static int decide(int x,int y){//通过递归实现整除
    Random random=new Random();
    if(x%y!=0){
        y=random.nextInt(100)+1;
        return decide(x,y);
    }
    else{
        return y;
    }
}

public void produce(){


}

}
为case是重复的所以只用一个做例子。用户输入的式子等级n在外层循环里创建了一个可以放置n+1个数字的数组,一个内循环是用来给之前创建的数组赋值,另一个内循环将随机选中的数字数组中的某一索引中的值和操作数组中某一索引的值连起来拼成一个表达式。
fenshu类代码如下:
import java.util.Scanner;

public class fenshu {
public fenshu() {

    String formula = null;
    int a, b,c,d;
    System.out.println("请输入题目的数量");
    Scanner scan2 = new Scanner(System.in);
    c = scan2.nextInt();
    String sz[] = new String[c];
    int x1, x2, m1, m2;
    for (d = 0; d < c; d++) {
        m1 = 1 + (int) (Math.random() * 10);
        x1 = 1 + (int) (Math.random() * m1);
        m2 = 1 + (int) (Math.random() * 10);
        x2 = 1 + (int) (Math.random() * m2);
        int operate = (int) (Math.random() * 3);//生成运算符
        if (operate == 0) {
            b = x1 * m2 + x2 * m1;
            a = m1 * m2;
            formula = yuefen(b, a);
            System.out.print(x1 + "/" + m1 + "+" + x2 + "/" + m2 + "=       ");
        }
        if (operate == 1) {
            b = x1 * m2 - x2 * m1;
            a = m1 * m2;
            formula = yuefen(b, a);
            System.out.print(x1 + "/" + m1 + "-" + x2 + "/" + m2 + "=       ");
        }
        if (operate == 2) {
            b = x1 * x2;
            a = m1 * m2;
            formula = yuefen(b, a);
            System.out.print(x1 + "/" + m1 + "*" + x2 + "/" + m2 + "=       ");
        }
        if (operate == 3) {
            b = m1 * x2;
            a = m2 * x1;
            formula  = yuefen(b, a);
            System.out.print(x1 + "/" + m1 + "/" + x2 + "/" + m2 + "=       ");
        }
        if ((d + 1) % 3 == 0) {
            System.out.println();
        }
        sz[d] = formula;

    }

}
public static String yuefen(int a,int b){
    int y = 1;
    for(int i=a;i>=1;i--){
        if(a%i==0&&b%i==0){
            y = i;
            break;
        }
    }
    int z = a/y;
    int m = b/y;
    if(z==0) {
        return "0";
    }
    return ""+z+"/"+m;
}
public void fs(){

}

}
对正误的判断并且统计正确率
int wrong = 0;
for(String st :expression)
{
System.out.println(st);
String str;
str = st;
Zhan lt = new Zhan();
List list = lt.work(str);
List list2 = lt.InfixToPostfix(list);
System.out.println("输入答案");
int daan = scan.nextInt();

    System.out.print("后缀表达式为:");
    lt.printList(list2);
    System.out.println(" ");

    if(daan != lt.doCal(list2)){
    System.out.println("错误    正确答案为:"+lt.doCal(list2));
    System.out.println(" ");
    wrong = wrong+1;}
    else{
        System.out.println("正确");
        System.out.println(" ");}
}
int sum=100-(wrong*100/num);
System.out.println("正确率:"+sum+"%");

五.PSP时间统计
PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 60
Estimate 估计这个任务需要多少时间 140
Development 开发 300
Analysis 需求分析 (包括学习新技术) 300
Coding Standard 代码规范 (为目前的开发制定合适的规范) 100
Design UML 设计项目UML类图 40
Coding 具体编码 200
Code Review 代码复审 60
Test 测试(自我测试,修改代码,提交修改) 120
Size Measurement 计算工作量(实际时间) 250
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 15

转载于:https://www.cnblogs.com/WZL-DM/p/10708115.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值