四则运算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")

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

原文地址:https://www.cnblogs.com/maplely/p/5295706.html