zoukankan      html  css  js  c++  java
  • 四则运算2

    1、题目避免重复; 2、可定制(数量/打印方式); 3、可以控制下列参数:
    是否有乘除法;
    是否有括号(最多可以支持十个数参与计算);
    数值范围;
    加减有无负数;
    除法有无余数!

    解题思路:

    1、定义 SIZE 打印题数

    2、定义是否有乘除法(用以改变随机符号范围)

    3、定义加减有无负数(用以改变加减符号状况下,数值的范围)

    4、定义除法有无余数(用除数*整数商 得到被除数,算式就写被除数/除数)

    5、用for循环生成题目for(int i=0;i<SIZE;i++)

        1、输入相关变量(有无负数、有无余数、有无乘除法、数值范围)

        2、生成符号

        3、生成第一个数

        4、生成第二个数(若要求除法无余数,就在此定义第一个数)

        5、得出算式 第一个数+符号+第二个数+=

          其中需要用for循环来排除重复的(若重复,则 i-1,退出此循环,重新再大循环一次)

    6、输出

    (有无乘除 将影响是否显示 除法有无余数 的选项)

    import java.util.Scanner;
    public class operations2 {
        public static int SIZE(int size)//定制数量
        {
            int s;
            s=size;
            return s;
        }
        
        public static int MultiplyDivide(String p1)//是否有乘除法
        {
            int m = 4;
            if(p1.equals("Y")){m=4;}
            if(p1.equals("N")){m=2;}
            return m;
        }
        
        public static String Negative(String p2)//加减有无负数
        {
            String n;
            n=p2;
            return n;
        }
        
        public static String Remainder(String p3)//除法有无余数
        {
            String r;
            r=p3;
            return r;
        }
        
        public static int Max(int max)//最大数
        {
            int m;
            m=max;
            return m;
        }
        public static int Min(int min)//最小数
        {
            int m;
            m=min;
            return m;
        }
        
        public static void Work(int MultiplyDivide,String Negative,String Remainder,int Max,int Min,int SIZE)//算式计算
        {
            String Again[][]=new String[SIZE][1];//用数组装算式,用以判断是否重复
            for(int i=0;i<SIZE;i++)//重复次数,用以确定算式多少
            {        
            int cha=Max-Min;
            int mid,nup1,ndown1,nup2,ndown2;
            String s1=new String();
            String s2=new String();
            String suanshi=new String();
            
            String fuhao=new String();//符号判定
            mid=(int)(Math.random()*MultiplyDivide);
            if(mid==0) fuhao="+";
            if(mid==1) fuhao="-";
            if(mid==2) fuhao="*";
            if(mid==3) fuhao="/";
            
            for(int j=0;j<2;j++)//两次循环,第一次为第一个数字,第二次为第二个数字
            {
                int n1 =-99999,n2=-99999;//用于后面是否为分数的判定
                int s=(int)(Math.random()*2);//随机数判定整数或分数,0->整数,1->分数
                if(s==0)//整数
                {
                    if(Negative.equals("N"))
                    {
                        if(mid==0||mid==1)
                        {
                            while(n1<0)
                            {n1=(int)(Min+Math.random()*(cha+1));}
                        }
                        else
                        {
                            n1=(int)(Min+Math.random()*(cha+1));
                        }
                    }
                    if(Negative.equals("Y"))
                    {n1=(int)(Min+Math.random()*(cha+1));}
                }
                if(s==1)//分数
                {
                    n1=(int)(Min+Math.random()*(cha+1));
                    n2=(int)(Min+Math.random()*(cha+1));
                        if(Negative.equals("N"))
                        {
                            if(mid==0||mid==1)
                            {
                                while(n1<=0||n2<=0)
                                {
                                    n1=(int)(Min+Math.random()*(cha+1));
                                    n2=(int)(Min+Math.random()*(cha+1));
                                }
                            }
                            else
                            {
                                while(n1==0||n2==0)
                                {
                                n1=(int)(Min+Math.random()*(cha+1));
                                n2=(int)(Min+Math.random()*(cha+1));
                                }
                            }
                        }
                        if(Negative.equals("Y"))
                        {
                            while(n1==0||n2==0)
                            {
                            n1=(int)(Min+Math.random()*(cha+1));
                            n2=(int)(Min+Math.random()*(cha+1));
                            }
                        }
                    int z1=Math.abs(n1),z2=Math.abs(n2);
                    int chushu=2;
                    if(z1>z2)
                    {
                        while(z2>=chushu)
                        {
                            if(z1%chushu==0&&z2%chushu==0)
                            {z1=z1/chushu;z2=z2/chushu;}
                            else
                            {chushu++;}
                        }
                        
                    }
                    else if(z1<z2)
                    {
                        while(z1>=chushu)
                        {
                            if(z1%chushu==0&&z2%chushu==0)
                            {z1=z1/chushu;z2=z2/chushu;}
                            else
                            {chushu++;}
                        }
                    }
                    else
                    {
                        z1=1;z2=1;
                    };
                    if(n1<0){n1=0-z1;}
                    else {n1=z1;}
                    if(n2<0){n2=0-z2;}
                    else {n2=z2;}
                }
                if(j==0)//第一个数字
                {
                    nup1=n1;ndown1=n2;
                    if(ndown1==-1&&nup1<0)
                    {nup1=Math.abs(nup1);}
                    if(ndown1==-1&&nup1>0)
                    {nup1=0-nup1;}
                    if(ndown1>-99999)//如果存在分母,则为分数
                    {
                        if(Math.abs(ndown1)!=1)
                        {
                            if(nup1<0&&ndown1<0)
                            {nup1=Math.abs(nup1);ndown1=Math.abs(ndown1);}
                            if(ndown1<0)
                            {s1="("+nup1+"/("+ndown1+"))"+"";}
                            else
                            {s1="("+nup1+"/"+ndown1+")"+"";}
                        }
                        if(Math.abs(ndown1)==1)//否则为整数
                        {
                            if(nup1>=0)
                            {s1=nup1+"";}
                            if(nup1<0)
                            {s1="("+nup1+")"+"";}
                        }
                    }
                    
                    else//否则为整数
                    {
                        if(nup1>=0)
                        {s1=nup1+"";}
                        if(nup1<0)
                        {s1="("+nup1+")"+"";}
                    }
                }
                if(j==1)//第二个数字
                {
                    nup2=n1;ndown2=n2;
                    if(mid==3)//当为除法时,除数不能为0,
                    {
                        while(nup2==0)
                        {nup2=(int)(Min+Math.random()*(cha+1));}//分子或整数不能为0
                    }
                    if(ndown2==-1&&nup2<0)
                    {nup2=Math.abs(nup2);}
                    if(ndown2==-1&&nup2>0)
                    {nup2=0-nup2;}
                    if(ndown2>-99999)//如果存在分母,则为分数
                    {
                        if(Math.abs(ndown2)!=1)
                        {
                            if(nup2<0&&ndown2<0)
                            {nup2=Math.abs(nup2);ndown2=Math.abs(ndown2);}
                            if(ndown2<0)
                            {s2="("+nup2+"/("+ndown2+"))"+"";}
                            else
                            {s2="("+nup2+"/"+ndown2+")"+"";}
                        }
                        else
                        {
                            if(nup2<0)
                            {
                                s2="("+nup2+")"+"";
                            }
                            if(nup2>0)
                            {
                                s2=nup2+"";
                            }
                        }
                    }
                    else//否则为整数
                    {
                        if(nup2<0)
                        {
                            s2="("+nup2+")"+"";
                        }
                        if(nup2>0)
                        {
                            s2=nup2+"";
                        }
                    }
                    if(mid==3&&Remainder.equals("N"))
                    {
                        nup1=nup2*n1;ndown1=ndown2;
                        if(ndown1%n1==0)
                        {ndown1=ndown1/n1;nup1=nup1/n1;}
                        if(ndown1>-99999)//如果存在分母,则为分数
                        {
                            if(Math.abs(ndown1)!=1)
                            {s1="("+nup1+"/"+ndown1+")"+"";}
                            else//否则为整数
                            {
                                s1=nup1+"";
                            }
                        }
                        else//否则为整数
                        {
                            s1=nup1+"";
                        }
                        
                    }
                }
            }
            suanshi=suanshi+s1+fuhao+s2+"=";//算式
            Again[i][0]=suanshi;
            for(int k=0;k<(i+1);k++)
            {
                if(Again[i][0].equals(Again[k][0])){k--;break;}
            }
            System.out.println(suanshi);
            }
        }
        
        public static void main(String args[])
        {
            String p3="Y";
            Scanner pan=new Scanner(System.in);
            System.out.println("请输入定制数量:");
            int size=pan.nextInt();
            System.out.println("是否有乘除法,Y--有,N--没有");
            String p1=pan.next();
            System.out.println("加减有无负数,Y--有,N--没有");
            String p2=pan.next();
            if(p1.equals("Y"))
            {
                System.out.println("除法有无余数,Y--有,N--没有");
                p3=pan.next();
            }
            System.out.println("请输入数值范围最大值:");
            int max=pan.nextInt();
            System.out.println("请输入数值范围最小值:");
            int min=pan.nextInt();
            
            int zhi=SIZE(size);
            int a=MultiplyDivide(p1) ;
            String b=Negative(p2);
            String c=Remainder(p3);
            int d=Max(max);
            int e=Min(min);
            
            Work(a,b,c,d,e,zhi);
            
        }
    }

    结果截图

    项目计划日志

    计划: 花费5个小时完成任务

    时间记录日志

    日期 开始时间 结束时间 总计(分) 活动 备注
    16-3-14

    8:00

    9:50 100 上课  
    16-3-15          
    16-3-16 15:00 16:00 60

    阅读《构建之法》第二章

    复习一些java知识点

     
    16-3-17 17:00 19:00 120 编写程序(四则运算2)  
    16-3-18          
    16-3-19 14:10 17:30 200

    编写程序(四则运算2)

    发表博客

     

    缺陷记录日志

    日期 错误问题
    3-17 while的循环错误
    3-19 java中字符串等于的问题:如p3=="N"改为p3.equals("N")

    总结:犯的错误实在简单,依靠断点才找出问题,浪费了大量时间。

  • 相关阅读:
    javascript Math.random()随机数函数
    asp.net 前台获取后台c#代码信息
    关于C#网站一般处理程序(ashx)中session的问题
    怎样才能在一般处理文件中创建新的Session和访问已经存在的Session?
    使用SqlParameter向数据库中插入数据
    C#串口编程学习简单实例
    认识nodejs
    01.Javascript中的接口Interface [转载]
    动态添加脚本,并触发回调函数 初步实现按需加载
    JS正则表达式 收藏
  • 原文地址:https://www.cnblogs.com/maplely/p/5295706.html
Copyright © 2011-2022 走看看