软件工程个人作业02

设计思路

1.题目避免重复

  产生随机数组成算式,将算式转化成string类型放入数组中,int i=0;i++;继续产生算式,与数组中的算式比较,有相同的不插入数组中,无相同的插入数组中,i+1,当i=要求的题目数量时,停止产生式子。

2.可定制

  输入要求题目的数量和输出时每行输出几道题。

3.可以控制下列参数

  3.1是否有乘除法

    可以用生成随机数的范围来控制(用函数封装)

  3.2是否有括号(最多可以支持十个参数参与与计算)

    用随机数确定是否产生括号,如果产生括号就将已经产生的式子括起来,为避免括号都在左边,向式子中添加新的数字和运算符号时要随机从左边加或从右边加。

  3.3数值范围

    可以乘以相应的数控制范围

  3.4加减有无负数

    有负数时用随机数来确定生成的数是否为负数,无负数时,要注意被减数一定要比  减数大。

  3.5除法有无余数

  产生随机数组成算式后取余判断是否有余数。

程序源代码:

import java.util.Scanner;

public class Arithmetic {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("请输入题目的数量:");
        Scanner sc1 = new Scanner(System.in);
        int quantity = sc1.nextInt();
        System.out.println("请输入每行输出几道题目:");
        Scanner sc2 = new Scanner(System.in);
        int num = sc2.nextInt();
        int size=quantity;
        String[]suanshizu=new String[size];
        equation(quantity,suanshizu);
        output(suanshizu,num,quantity);
    }
    static void equation(int quantity,String a[])
    {
        System.out.println("请输入数值范围的最大值:");
        Scanner sc1 = new Scanner(System.in);
        int max = sc1.nextInt();
        System.out.println("请输入数值范围的最小值:");
        Scanner sc2 = new Scanner(System.in);
        int min = sc2.nextInt();
        System.out.println("请选择是否有负数(是:1   否:0)");
        Scanner sc3 = new Scanner(System.in);
        int x = sc3.nextInt();
        int iffu=x;
        System.out.println("请选择是否有分数(是:1   否:0)");
        Scanner sc4 = new Scanner(System.in);
        int y = sc4.nextInt();
        int iffen=y;
        System.out.println("请选择是否有乘除法(是:1   否:0)");
        Scanner sc5 = new Scanner(System.in);
        int z = sc5.nextInt();
        int ifcheng=z;
        System.out.println("请选择除法是否有余数(是:1   否:0)");
        Scanner sc6 = new Scanner(System.in);
        int ifyu = sc6.nextInt();
        for(int i=0;i<quantity;)
        {
            String suanshi;
            int c=1+(int)(Math.random()*7);
            suanshi=randomNumber(max,min,iffu,iffen);
            for(int t=0;t<c;t++)
            {
                if(x==1)
                    iffu=(int)(Math.random()*2);
                if(y==1)
                    iffen=(int)(Math.random()*2);
                if(z==1)
                    ifcheng=(int)(Math.random()*2);
                int n0=(int)(Math.random()*2);
                if(n0==0)
                {
                    suanshi=suanshi+randoSymbol(ifcheng,max,ifyu);
                    suanshi=suanshi+randomNumber(max,min,iffu,iffen);
                }
                if(n0==1)
                {
                    suanshi=randoSymbol(ifcheng,max,ifyu)+suanshi;
                    suanshi=randomNumber(max,min,iffu,iffen)+suanshi;
                }
                int n=(int)(Math.random()*3);
                if(n==2)
                {suanshi='['+suanshi+']';}
                }
            i=i+ti(a,suanshi,i);
        }
    }
    static String randomNumber(int max,int min,int iffu,int iffen)
    {
        String number;
        if(iffen==0)
            {
            int a=(int)(Math.random()*max);
            number=String.valueOf(a);
            }
        else
        {
            int a=(int)(Math.random()*max);
            int b=(int)(Math.random()*max);
            if(b<a)
            {
            int t=b;
            b=a;
            a=t;
            }
        for(int i=a;i>1;i--)
        {
            if(a%i==0&&b%i==0)
            {
                a=a/i;
                b=b/i;
            }
        }
            number='('+String.valueOf(a)+'/'+String.valueOf(b)+')';
        }
        if(iffu==1)
            number='('+"-"+number+')';
        return number;
    }
    static String randoSymbol(int ifcheng,int max,int ifyu)
    {
        String symbol;
        int a=1+(int)(Math.random()*4);
        symbol=String.valueOf(a);
        if(ifcheng==0)
        {
            if(a==1||a==2)
            {
                char s='+';
                symbol=String.valueOf(s);
            }
            if(a==3||a==4)
            {
                char s='-';
                symbol=String.valueOf(s);
            }
        }
        if(ifcheng==1)
        {
            if(a==1)
            {
                char s='+';
                symbol=String.valueOf(s);
            }
            if(a==2)
            {
                char s='-';
                symbol=String.valueOf(s);
            }
            if(a==3)
            {
                char s='×';
                symbol=String.valueOf(s);
            }
            if(a==4)
            {
                int number1,number2;
                char s='÷';
                symbol=String.valueOf(s);
                if(ifyu==0)
                {for(;;)
                {
                    number1=1+(int)(Math.random()*max);
                    number2=2+(int)(Math.random()*max);
                    if(number1%number2==0)
                        break;
                }
                String num1=String.valueOf(number1);
                String num2=String.valueOf(number2);
                symbol=randoSymbol(0,max,ifyu)+num1+symbol+num2+randoSymbol(0,max,ifyu);
                }
            }
        }
        return symbol;
    }
    static void output(String a[],int num,int quantity)
    {
        for(int i=0;i<quantity;i++)
        {
            if((i+1)%num==0)
                System.out.println(a[i]+'=');
            else
                System.out.print(a[i]+'='+'	'+'	');
        }
    }
    static int ti(String a[],String v,int i)
    {
        
        int j;
        if(i!=0)
        {
            for(j=0;j<i;j++)
                {
                    if(a[j]==v)
                    {
                        break;
                    }
                }
            if(j==i)
            {
                a[i]=v;
                return 1;
                }
            else
                return 0;
            
        }
        else
        {
            a[0]=v;
            return 1;
        }
    }
    }
    

运行结果截图

程序分析:

因为老师要求在个人作业01的基础上进行编译,结果我发现我的01程序无法进行迭代,这是很严重的一个错误,在我写01程序时完全没有想到之后如果添加功能要怎么添加,这既是我没有经验也是我贪图容易走捷径,其实在写01程序时想过要用函数实现,但最后并没有,以后要注意这个问题,还有就是编程之前,设计思路一定要想好,想清晰,不然真的会为以后的编程任务带来很大的麻烦。另外,相对于我比较熟悉的C++而言,java有很多小的细节与之不同,本来我看到题目时首先想到的是树,但因为java没有指针不得不换成了动态数组。

周活动总结表

姓名:张雪晴                                                    日期:3.19.2016 

日期

任务

听课

编写程序

阅读课本

准备考试

日总计

周日

0

周一

100

20

120

周二

0

周三

180

180

周四

0

周五

35

35

周六

200

10

210

周总计

100

380

75

545

时间记录日志

学生:张雪晴          日期:3.14.2016

教师:王建民             课程:PSP

日期

开始时间

结束时间

中断时间

净时间

活动

备注

C

U

3/14

9:35

9:50

15

设计思路

课堂

pm8:00

pm9:00

10

50

小组讨论设计思路

讨论跑题10分钟

3/15

pm3:15

pm3:50

0

35

书写设计思路

3/16

pm4:50

pm8:30

40

180

编写程序

休息,吃饭,玩手机

3/18

pm1:00

pm1:35

0

35

看书

3/19

am8:50

am11:30

0

200

编写程序

am12:30

pm1:10

40

看书,写读书笔记

 

学生:张雪晴

日期:16.3.19

教员:王建民

程序号:1

日期

编号

类型

引入阶段

排除阶段

修复时间

修复缺陷

3/16

1

编码

编译

10min

描述:提示输入语句写错了,导致输入的数据不符合要求程序报错

2

编码

编译

5min

描述:输出时数组越界

3

编码

编译

7min

描述:程序不能调用动态的方法(来自百度)

4

编码

编译

5min

描述:函数的返回值不能为不确定的变量

3/19

5

编码

编译

20min

描述:在java中函数的地址传递与c++不同,上网查了一下。

6

编码

编译

1min

描述:输出的算式没有“=

7

编码

编译

2min

描述:String类型不能直接等于char类型的变量,要进行类型转换

原文地址:https://www.cnblogs.com/1443188449qq/p/5295245.html