• 软件工程个人作业02


    四则运算2的设计思路:

      因为老师添加了一些要求,比如说能够通过参数来控制有无乘除法,加减有无负数,除法是否有余数。

    所以,我意识到,应该把每个式子都写成函数,比如说,整数加法式子,减法式子,都写成函数,然后再通过参数来控制

    是否产生此类型的式子,以及式子的一些格式。

    四则运算的代码如下:

      Main.java

      

    import java.util.*;
    
    public class Main {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            System.out.println("请输入数值范围:");
            Scanner scan=new Scanner(System.in);
            int range=scan.nextInt();
            
            //新想法,可以在用户还没做出选择之前,先出点没有任何要求的题
            System.out.println("需要定制多少题:");
            int number=scan.nextInt();
            int alnumber=0;  //代表已出题目的数目
            int i; //用于循环
            Random ran=new Random();   //专门用于产生随机数
            int ranNumber;//存随机产生的数
            //建一个Ways类的对象,用于方法的调用
            Ways ways=new Ways();
            
            //用于存储用户的选择
            char choice[]=new char[4];
            System.out.println("是否需要乘除法?");
            choice[0]=scan.next().charAt(0);
            System.out.println("是否需要括号?");
            choice[1]=scan.next().charAt(0);
            System.out.println("加减是否需要负数?");
            choice[2]=scan.next().charAt(0);
            System.out.println("除法是否需要余数?");
            choice[3]=scan.next().charAt(0);
            
            for(i=0;i<number;i++){
                //开始出题
                switch(ran.nextInt(8)+1){
                case 1:
                    System.out.println(ways.addInt(range));
                    break;
                case 2:
                    System.out.println(ways.mimusInt(range, choice[2]));
                    break;
                case 3:
                    
                    if(ways.multiplyInt(range, choice[0])!=null){
                        System.out.println(ways.multiplyInt(range, choice[0]));
                    }
                    else i--;
                    break;
                case 4:
                    if(ways.divideInt(range, choice[0],choice[3])!=null){
                        System.out.println(ways.divideInt(range, choice[0],choice[3]));
                    }
                    else i--;
                    break;
                case 5:
                        System.out.println(ways.add(range));
                    break;
                case 6:
                        System.out.println(ways.minus(range,choice[2]));
                    break;
                case 7:
                    if(ways.multiply(range,choice[0])!=null){
                        System.out.println(ways.multiply(range,choice[0]));
                    }
                    else i--;
                    break;
                case 8:
                    if(ways.divide(range,choice[0])!=null){
                        System.out.println(ways.divide(range,choice[0]));
                    }
                    else i--;
                    break;
                }
            }
        }
    
    }

      Ways.java

      

    import java.util.*;
    
    
    public class Ways {
        public String addInt(int range){
            //整数加法
            Random ran=new Random();
            int a=ran.nextInt(range)+1;
            int b=ran.nextInt(range)+1;
            int c=a+b;
            String result=a+"+"+b+"="+c;
            return result;
        }
        public String mimusInt(int range ,char a1){
            //整数减法
            Random ran=new Random();
            int a=ran.nextInt(range)+1;
            int b=ran.nextInt(range)+1;
            if(a1=='n')
            {
                if(a<b){
                    int temp;
                    temp=a;
                    a=b;
                    b=temp;
                }
            }
            int c=a-b;
            String result=a+"-"+b+"="+c;
            return result;
        }
        public String multiplyInt(int range,char a1){
            //整数乘法
            Random ran=new Random();
            int a=ran.nextInt(range)+1;
            int b=ran.nextInt(range)+1;
            int c=a*b;
            String result=a+"*"+b+"="+c;
            if(a1=='n'){
                result=null;
            }
            return result;
        }
        public String divideInt(int range,char a1,char a2){
            //整数除法
            Random ran=new Random();
            int a=ran.nextInt(range)+1;
            int b=ran.nextInt(range)+1;
            while(b==0){
                b=ran.nextInt(range)+1;
            }
            if(a2=='n')
            {
                while(a%b!=0){
                    a=ran.nextInt(range)+1;
                    b=ran.nextInt(range)+1;
                    while(b==0){
                        b=ran.nextInt(range)+1;
                    }
                }
            }
            int c=a/b;
            String result=a+"/"+b+"="+c;
            if(a1=='n'){
                result=null;
            }
            return result;
        }
        public String add(int range){
            //真分数加法
            Random ran=new Random();
            int a=ran.nextInt(range)+1;
            int b=ran.nextInt(range)+1;
            int c=ran.nextInt(range)+1;
            int d=ran.nextInt(range)+1;
            
            //分母不能为零
            while (b==0){
                b=ran.nextInt(range);
            }
            while (d==0){
                d=ran.nextInt(range);
            }
            
            if(a>b){
                int temp;
                temp=a;
                a=b;
                b=temp;
            }
            if(c>d){
                int temp;
                temp=c;
                c=d;
                d=temp;
            }
            
            String result="("+reduce(a,b)+")"+"+"+"("+reduce(c,d)+")"+"="+calculate(reduce(a,b),reduce(c,d),"+");
            return result;
        }
        
        //用于判断两个分数的大小
        public boolean judge(int a,int b,int c,int d ){
            if(a*d-b*c<0){
                return false;
            }
            return true;
        }
        public String minus(int range,char a1){
            //真分数减法
            Random ran=new Random();
            int a=ran.nextInt(range)+1;
            int b=ran.nextInt(range)+1;
            int c=ran.nextInt(range)+1;
            int d=ran.nextInt(range)+1;
            
            //分母不能为零
            while (b==0){
                b=ran.nextInt(range);
            }
            while (d==0){
                d=ran.nextInt(range);
            }
            
            if(a>b){
                int temp;
                temp=a;
                a=b;
                b=temp;
            }
            if(c>d){
                int temp;
                temp=c;
                c=d;
                d=temp;
            }
            if(a1=='n'){
                while(judge(a,b,c,d)==false){
                    a=ran.nextInt(range)+1;
                    b=ran.nextInt(range)+1;
                    c=ran.nextInt(range)+1;
                    d=ran.nextInt(range)+1;
                    if(a>b){
                        int temp;
                        temp=a;
                        a=b;
                        b=temp;
                    }
                    if(c>d){
                        int temp;
                        temp=c;
                        c=d;
                        d=temp;
                    }
                }
            }
            String result="("+reduce(a,b)+")"+"-"+"("+reduce(c,d)+")"+"="+calculate(reduce(a,b),reduce(c,d),"-");
            return result;
        }
        public String multiply(int range ,char a1){
            //真分数乘法
            Random ran=new Random();
            int a=ran.nextInt(range)+1;
            int b=ran.nextInt(range)+1;
            int c=ran.nextInt(range)+1;
            int d=ran.nextInt(range)+1;
            
            //分母不能为零
            while (b==0){
                b=ran.nextInt(range);
            }
            while (d==0){
                d=ran.nextInt(range);
            }
            
            if(a>b){
                int temp;
                temp=a;
                a=b;
                b=temp;
            }
            if(c>d){
                int temp;
                temp=c;
                c=d;
                d=temp;
            }
            
            String result="("+reduce(a,b)+")"+"*"+"("+reduce(c,d)+")"+"="+calculate(reduce(a,b),reduce(c,d),"*");
            
            if(a1=='n'){
                result=null;
            }
            return result;
        }
        public String divide(int range,char a1){
            //真分数除法
            Random ran=new Random();
            int a=ran.nextInt(range)+1;
            int b=ran.nextInt(range)+1;
            int c=ran.nextInt(range)+1;
            int d=ran.nextInt(range)+1;
            //分母不能为零
            while (b==0){
                b=ran.nextInt(range);
            }
            while (d==0){
                d=ran.nextInt(range);
            }
            
            if(a>b){
                int temp;
                temp=a;
                a=b;
                b=temp;
            }
            if(c>d){
                int temp;
                temp=c;
                c=d;
                d=temp;
            }
            String result="("+reduce(a,b)+")"+"/"+"("+reduce(c,d)+")"+"="+calculate(reduce(a,b),reduce(c,d),"/");
            if(a1=='n'){
                result=null;
            }
            return result;
        }
        public int maxCommon(int a ,int b)
        {
            //循环法求两个数的最大公约数
            
            //保证第一个参数大于第二个参数
            if(a<b)
            {
                int temp;
                temp=a;
                a=b;
                b=temp;
            }
            while(a%b!=0)   //在余数不为零时循环
            {
                int temp=a%b;
                a=b;
                b=temp;
            }
            return b;  //返回最大公约数
        }
        
        public int minCommon(int a,int b)
        {
            //求最小公倍数
            return a*b/maxCommon(a,b);
        }
        
        public String reduce(int a ,int b)
        {
            //对于a/b组成的分数进行约分
            
            //第一步就是找出两者的最大公约数
            int c=maxCommon(a,b);
            
            //分子分母约分
            a=a/c; 
            b=b/c;
            
            //把a,b转换成分数返回
            String temp=a+"/"+b;
            return temp;
        }
        public String calculate(String a,String b,String c) //参数分别代表第一个分数,第二个分数,以及运算符
        {
            int a1=Integer.parseInt(a.substring(0,a.indexOf("/")));//代表a的分子
            int a2=Integer.parseInt(a.substring(a.indexOf("/")+1));//代表a的分母
            int b1=Integer.parseInt(b.substring(0,b.indexOf("/")));//代表b的分子
            int b2=Integer.parseInt(b.substring(b.indexOf("/")+1));//代表b的分母
            if(c.equals("+"))
            {
                //首先求两个分母的最小公倍数,进行通分
                int temp=minCommon(a2,b2);
                a1=temp/a2*a1;
                b1=temp/b2*b1;
                
                //求合并后的分子
                int temp1=a1+b1;
                
                String temp2=reduce(temp1,temp);
                return temp2;
            }
            else if(c.equals("-"))
            {
                //首先求两个分母的最小公倍数,进行通分
                int temp=minCommon(a2,b2);
                a1=temp/a2*a1;
                b1=temp/b2*b1;
                
                //求合并后的分子
                int temp1=a1-b1;
                
                return reduce(temp1,temp);
            }
            else if(c.equals("*"))
            {
                //直接把分母相乘得到合并后的分母
                int temp=a2*b2;
                
                //求合并后的分子
                int temp1=a1*b1;
                
                return reduce(temp1,temp);
            }
            
            else if(c.equals("/"))
            {
                //分数相除就是第一个分数乘以第二个分数的倒数
                int temp=a2*b1;
                
                //求合并后的分子
                int temp1=a1*b2;
                
                return reduce(temp1,temp);
            }
            String xuhaojun="成功了";
            return xuhaojun;
            
        }
        public String equation(int range,char a1){
            Random ran=new Random();
            int number=ran.nextInt(9)+2;//决定这个式子有几个数
            int number1=number/2;
            for(int i=0;i<number1;i++){
                
            }
            String result="";
            if(a1=='n'){
                result=null;
            }
            return result;
        }
    }

      程序结果截图:

    程序总结:

      通过这个程序,我真是深刻的认识到了分而治之的思想,当我们遇到一个问题时,不管这个问题怎么样,

    我们应该想到这个问题分解成一些比较小的问题,然后再分别去解决这些小问题。

    还有就是一定要把解决问题的手段封装到方法里,这样会便于以后的管理。

    项目计划日志:

      

     

    日期

    任务

    听课

    编写程序

    阅读课本

    准备考试

    日总计

    周一

    60

    60

     

     

    120

    周二

     

     

     

     

     

    周三

     

    180

     

     

    180

    周四

     

    120

     

     

    120

    周五

     

     

     

     

     

    周总计

    60

    360

     

     

    420

    时间记录日志:

      

    日期

    开始时间

    结束时间

    中断时间

    净时间

    活动

    备注

    C

    U

    3/6

    14:00

    16:00

     

    120

    听课

    软件工程概论

     

     

     

    22:00

    22:40

     

    40

    写思路

    把程序的思路写下来

     

     

    3/8

    15:00

    18:00

     

    180

    编程序

    四则运算2

     

     

    3/9

    20:00

    22:00

     

    120

    编程序

    四则运算2

     

     

    3/10

    16:00

    18:00

     

    120

    写报告

    四则运算2 的报告

     

     
  • 相关阅读:
    【转】PowerManager 与 WakeLock
    【转】设计模式总结之模式分类
    【转】一篇文章,教你学会Git
    【转】Iconfont
    【转】码云source tree 提交超过100m 为什么大文件推不上去
    各 Android 平台版本支持的 API 级别
    【转】Android进程机制
    【转】数据库CRUD操作
    【转】数据库--视图的基本概念以及作用
    动态规划的两种形式
  • 原文地址:https://www.cnblogs.com/haojun/p/6532698.html
Copyright © 2020-2023  润新知