首页 > 代码库 > 软件工程个人作业02-1

软件工程个人作业02-1

 老师对自动出题的系统又有了新的功能:

1.是否有乘除法:

2.是否有括号:最多可支持十个数参与计算

3.数值范围:

4.加减结果有无负数:

5.除法结果有无余数:

(因为和上文的思路有些交汇,不懂的可以参考上文 》》点击这里参考上文)

 下面是我的思路:

1.是否有乘除法:

分条件设置a的值

如果选择无乘除:a=(int)(0+Math.random()*2);//a=0a=1时分别对应着string数组的“+”“-

如果选择无乘除:a=(int)(0+Math.random()*4)

 

2.是否有括号:最多可支持十个数参与计算

(有无括号涉及了多项式的加减乘除法,与原来的程序有很大的不同,需要重新改革,因为改革后还没有实现所有的要求的功能,所以我将在软件工程个人作业02 - 2中单独展示我的思路。)

3.数值范围:

通过设置数组内random的值来设置数值的范围:

//输入数值范围2017 3 8

System.out.println("功能3:输入数值范围:");

System.out.println("请输入上界:");

int number3=scan2.nextInt();

//说明:例如30-40是大于30不包括40的数

System.out.println("请输入下界:");

int number4=scan2.nextInt();

r1[i]=(int)(number3+Math.random()*(number4-number3));

r2[i]=(int)(number3+Math.random()*(number4-number3));

4.结果加减有无负数:

选择无负数:如果结果是负数,交换减数和被减数

int c;

    

c=r2[i];

r2[i]=r1[i];

r1[i]=c;

选择有负数:不用做任何操作。

 

5.结果除法有无余数:

选择结果无余数:随机生成除数,被除数限制成除数的kk为整数)倍,因数值范围限制k的取值范围为1~max-被除数)/被除数

结果有余数:则不用做任何操作。

 

下面是这次试验的代码:

package sum1;

import java.util.Scanner;

public class sum1 {
    //对于整数来书:建立两个int型的数组,储存信息,便于计算和判断
    //对于真分数来书,建立两个数组,比较数组的大小,大的赋值r1[i]
    static int[] r1;
    static int[] r2;
   //对于真分数来书,建立两个数组,比较数组的大小,大的赋值n3[i]
    static int[] n3;
    static int[] n4;
    //结果设置成double型的,因为整数相除容易出double
    static double[]S1;
    //计算真分数的计算结果,进行化简,储存信息
    static int[]S2;
    static int[]S3;
    
    static String[] r3={"+","-","*","/"};
    //将运算符储存在是s1[i]中,便于比较算式,生成不一样的数据
    static String s1[];
    //比较不同所需要用到的循环参数;
    static int j;
    /**
     * @param args
     */
    public static void main(String[] args) {
        
        while(true)
        {
            Scanner scan1=new Scanner(System.in);
            System.out.println("请输入选项:");
            System.out.println("1、整数计算  2、真分数计算 3、退出");
            
            int choose=scan1.nextInt();
            
            if(choose==1)
            {
                System.out.println("功能1:请输入定制数量:");
                Scanner scan2=new Scanner(System.in);
                int number=scan2.nextInt();
                
                //是否有乘除法 2017 3 6
                System.out.println("功能2:是否有乘除:0.否  1.是");
                int number2=scan2.nextInt();
                
                //输入数值范围2017 3 8
                System.out.println("功能3:输入数值范围:");
                System.out.println("请输入上界:");
                int number3=scan2.nextInt();
                //说明:例如30-40是大于30不包括40的数
                System.out.println("请输入下界:");
                int number4=scan2.nextInt();
                
                //加减有无负数 2017 3 8
                System.out.println("功能4:加减有无负数:0.否  1.是");
                int number5=scan2.nextInt();
                
                //除法有无余数 2017 3 8
                System.out.println("功能5:除法有无余数:0.否  1.是");
                int number6=scan2.nextInt();
                
                r1=new int[number];
                r2=new int[number];
                S1=new double[number];
                s1=new String[number];
                
                for(int i=0;i<number;i++)
                {
                    //是否有乘除法 2017 3 6(运算符操作)
                    int a=0;
                    if(number2==0)
                    {
                         a=(int)(0+Math.random()*2);
                    }
                    else
                    {
                        a=(int)(0+Math.random()*4);
                    }
                    
                    s1[i]=r3[a];
                    
                    //运算数操作制作2017 3 8
                    r1[i]=(int)(number3+Math.random()*(number4-number3));
                    
                    r2[i]=(int)(number3+Math.random()*(number4-number3));

                    
                    if(s1[i].equals("+"))
                    {
                        
                        S1[i]=(r1[i]+r2[i]);
                        
                        System.out.println(r1[i]+" + "+r2[i]+" =");
                    }
                    
                    else if(s1[i].equals("-"))
                    { 
                        if(number5==0)
                        {
                             if(r1[i]>r2[i])
                               {
                                   S1[i]=(r1[i]-r2[i]);
                                   System.out.println(r1[i]+" - "+r2[i]+" =");
                               }
                               //减号结果不为负数
                               else
                               {
                                    int c;
                                    
                                    c=r2[i];
                                    r2[i]=r1[i];
                                    r1[i]=c;
                                    
                                    S1[i]=(r1[i]-r2[i]);
                                    
                                   System.out.println(r1[i]+" - "+r2[i]+" =");
                               }
                        }
                        else
                        {
                            S1[i]=(r1[i]-r2[i]);
                            System.out.println(r1[i]+" - "+r2[i]+" =");
                        }
                      
                    }
                    
                    else if(s1[i].equals("*"))
                    {
                        S1[i]=(r1[i]*r2[i]);
                        System.out.println(r1[i]+" x "+r2[i]+" =");
                    }
                    else if(s1[i].equals("/"))
                    {
                        //无余数
                        if(number6==0)
                        { 
                            //如果所设范围太小,结果为整数的分母
                            r2[i]=(int)(number3+Math.random()*(number4-number3));
                            if(number4>number3)
                            r1[i]=r2[i]*(int)(1+Math.random()*(number4/r2[i]-1));
                            else
                            r1[i]=r2[i]*(int)(1+Math.random()*(number3/r2[i]-1));
                            
                            while(true)
                            {
                                if(r2[i]!=0)
                                {
                                     S1[i]=(r1[i]/r2[i]);
                                     System.out.println(r1[i]+" ÷ "+r2[i]+" =");
                                     break;
                                }
                                else //从新生成
                                {
                                    r2[i]=(int)(number3+Math.random()*(number4-number3));
                                    if(number4>number3)
                                    r1[i]=r2[i]*(int)(1+Math.random()*(number4/r2[i]-1));
                                    else
                                    r1[i]=r2[i]*(int)(1+Math.random()*(number3/r2[i]-1));
                                }
                            }    
                        }
                        
                        else
                        {
                            while(true)
                            {
                                if(r2[i]!=0)
                                {
                                     S1[i]=(r1[i]/r2[i]);
                                     System.out.println(r1[i]+" ÷ "+r2[i]+" =");
                                     break;
                                }
                                else //从新生成
                                {
                                    r2[i]=(int)(number3+Math.random()*(number4-number3));
                                }
                            }    
                            
                        }
                        
                    }
                    //for
                }
                
                System.out.println("是否输出定制结果?(1.输出    其他: 不输出)");
                Scanner scan3=new Scanner(System.in);
                int judge1=scan3.nextInt();
                
                if(judge1==1)
                {
                    for(int i=0;i<number;i++)
                    {
                        System.out.println("第"+(i+1)+"个算式的结果为:"+S1[i]);
                    }
                }
                //choose
            }
            
            
             if(choose==2)
            {
                System.out.println("请输入定制数量:");
                Scanner scan2=new Scanner(System.in);
                int number=scan2.nextInt();
                
                //是否有乘除法 2017 3 6
                System.out.println("功能2:是否有乘除:0.否  1.是");
                int number2=scan2.nextInt();
                
                //输入数值范围2017 3 8
                System.out.println("功能3:输入数值范围:");
                System.out.println("请输入上界:");
                int number3=scan2.nextInt();
                //说明:例如30-40是大于30不包括40的数
                System.out.println("请输入下界:");
                int number4=scan2.nextInt();
                
                //加减有无负数 2017 3 8
                System.out.println("功能4:加减有无负数:0.否  1.是");
                int number5=scan2.nextInt();
                
                //除法有无余数 2017 3 8(分数的省略)
                
                r1=new int[number];
                r2=new int[number];
                n3=new int[number];
                n4=new int[number];
                
                S2=new int[number];
                S3=new int[number];
                
                for(int i=0;i<number;i++)
                {
                    r1[i]=(int)(number3+Math.random()*(number4-number3));
                    r2[i]=(int)(number3+Math.random()*(number4-number3));
                    
                    n3[i]=(int)(number3+Math.random()*(number4-number3));
                    n4[i]=(int)(number3+Math.random()*(number4-number3));
                    
                    //是否有乘除法 2017 3 6
                    int a=0;
                    if(number2==0)
                    {
                         a=(int)(0+Math.random()*2);
                    }
                    else
                    {
                        a=(int)(0+Math.random()*4);
                    }
                    
                    s1[i]=r3[a];
                    
                    for(j=0;j<i;j++)
                    {
                        if(r1[i]==r1[j]&&r1[i]==r1[j]&&s1[i].equals(s1[j])
                                &&n3[i]==n3[j]&&n4[i]==n4[j])
                        {
                            r1[i]=(int)(number3+Math.random()*(number4-number3));
                            r2[i]=(int)(number3+Math.random()*(number4-number3));
                            n3[i]=(int)(number3+Math.random()*(number4-number3));
                            n4[i]=(int)(number3+Math.random()*(number4-number3));
                            j=0;
                        }
                    }
                    while(r2[i]==0)
                    {
                        r2[i]=(int)(number3+Math.random()*(number4-number3));
                    }
                    
                    //返回最大公约数
                    int gy1=simple(r1[i],r2[i]);
                    
                    r1[i]=r1[i]/gy1;
                    r2[i]=r2[i]/gy1;
                    
                    //建立真分数
                    int c1;
                    
                    if(r1[i]>r2[i])
                    {
                        c1=r2[i];
                        r2[i]=r1[i];
                        r1[i]=c1;
                    }
                    
                    while(n4[i]==0)
                    {
                        n4[i]=(int)(number3+Math.random()*(number4-number3));
                    }
                    
                    //返回最大公约数
                    int gy2=simple(n3[i],n4[i]);
                    n3[i]=n3[i]/gy2;
                    n4[i]=n4[i]/gy2;
                    
                    //建立真分数
                    int c2;
                    
                    if(n3[i]>n4[i])
                    {
                        c2=n4[i];
                        n4[i]=n3[i];
                        n3[i]=c2;
                    }
                        
                    
                    if(s1[i].equals("+"))
                    {
                       S2[i]=r1[i]*n4[i]+r2[i]*n3[i];
                       S3[i]=r2[i]*n4[i];
                       //返回最大公约数
                        gy1=simple(S2[i],S3[i]);
                        
                        S2[i]=S2[i]/gy1;
                        S3[i]=S3[i]/gy1;
                       
                       System.out.println(r1[i]+"/"+r2[i]+" + "+n3[i]+"/"+n4[i]+" =");
                    }
                    
                    else if(s1[i].equals("-"))
                    {
                        if(number5==0)
                        {
                            S2[i]=r1[i]*n4[i]-r2[i]*n3[i];
                            
                            //结果为负数
                            if(S2[i]<0)
                            {
                                c2=n4[i];
                                n4[i]=r2[i];
                                r2[i]=c2;
                                
                                c2=r1[i];
                                r1[i]=n3[i];
                                n3[i]=c2;
                            }
                            
                            S2[i]=r1[i]*n4[i]-r2[i]*n3[i];
                            S3[i]=r2[i]*n4[i];
                               //返回最大公约数
                            gy1=simple(S2[i],S3[i]);
                                
                            S2[i]=S2[i]/gy1;
                            S3[i]=S3[i]/gy1;
                            
                           System.out.println(r1[i]+"/"+r2[i]+" - "+n3[i]+"/"+n4[i]+" =");
                            
                        }
                        else
                        {
                            S2[i]=r1[i]*n4[i]-r2[i]*n3[i];
                            S3[i]=r2[i]*n4[i];
                               //返回最大公约数
                            gy1=simple(S2[i],S3[i]);
                                
                            S2[i]=S2[i]/gy1;
                            S3[i]=S3[i]/gy1;
                            
                           System.out.println(r1[i]+"/"+r2[i]+" - "+n3[i]+"/"+n4[i]+" =");
                        }
                        
                    }
                    
                    else if(s1[i].equals("*"))
                    {
                        S2[i]=r1[i]*n3[i];
                        S3[i]=r2[i]*n4[i];
                           //返回最大公约数
                        gy1=simple(S2[i],S3[i]);
                            
                        S2[i]=S2[i]/gy1;
                        S3[i]=S3[i]/gy1;
                        
                       System.out.println(r1[i]+"/"+r2[i]+" x "+n3[i]+"/"+n4[i]+" =");
                    }
                    else if(s1[i].equals("/"))
                    {
                        S2[i]=r1[i]*n4[i];
                        S3[i]=r2[i]*n3[i];
                           //返回最大公约数
                        gy1=simple(S2[i],S3[i]);
                            
                        S2[i]=S2[i]/gy1;
                        S3[i]=S3[i]/gy1;
                        
                       System.out.println(r1[i]+"/"+r2[i]+" ÷  "+n3[i]+"/"+n4[i]+" =");
                    }
                    //for
                }
                
                System.out.print("是否输出定制结果?(1.输出    其他: 不输出)");
                Scanner scan4=new Scanner(System.in);
                int judge2=scan4.nextInt();
                
                if(judge2==1)
                {
                    for(int i=0;i<number;i++)
                    {
                        System.out.println("第"+(i+1)+"个算式的结果为:"+S2[i]+"/"+S3[i]);
                    }
                }
                //choose
            }
            else if(choose==3)
            {
                break;
            }
            else 
            {
                System.out.println("输入有误,请重新输入!");
            }
            //while
        }
        //main
    }
    
    
    public static int simple(int n1,int n2)
    {
        int max = n2;
        
        if(n1>n2)
        {
            max=n1;
        }
        
        int gongyue=1;
        
        for(int i=1;i<=max;i++)
        {
            if(n1%i==0 && n2%i==0)
            {
                gongyue=i;
            }
        }
        return gongyue;
    }
}

下面是实验结果截图:

技术分享

实验总结:

这次试验充分的体会到了在原来代码上进行功能的修改的方便性,大大缩短了实验的时间,当然,括号的功能让我了解了自己实现代码的不足,后来的修改让我感到了代码灵活性的重要性,这个实验的代码,让我限制在了两个数的加减乘除,修改的时候考虑到会花费很长时间进行修改,所以进行了翻改。当然翻盖的结果有些差强人意,丢失了许多的功能,这也是下一问中要说的,总之,实验还没结束,同志仍需努力。

 

软件工程个人作业02-1