zoukankan      html  css  js  c++  java
  • 软件工程个人作业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类型的变量,要进行类型转换

  • 相关阅读:
    一文摸透从输入URL到页面渲染的过程
    JavaScript实现哈希表
    JavaScript数据结构与算法博客目录
    JavaScript实现图结构
    从宏观到细节为你讲解前端性能优化
    详解HTTP协议
    JavaScript实现排序算法
    Google Stadia免费试用两个月
    安卓手机调成黑白屏幕
    UWP Xbox上隐藏键盘⌨
  • 原文地址:https://www.cnblogs.com/1443188449qq/p/5295245.html
Copyright © 2011-2022 走看看