• 软件工程结对作业02


    作业要求:
    1、 生成的题目中计算过程不能产生负数,也就是说算术表达式中如果存在形如e1 − e2的子表达式,那么e1 ≥ e2。
    2、生成的题目中如果存在形如e1 ÷ e2的子表达式,那么其结果应是真分数。
    3、每道题目中出现的运算符个数不超过3个,括号不限。
    4、程序一次运行生成的题目不能重复,即任何两道题目不能通过有限次交换+和×左右的算术表达式变换为同一道题目。
    例如,23 + 45 = 和45 + 23 = 是重复的题目,6 × 8 = 和8 × 6 = 也是重复的题目。
    3+(2+1)和1+2+3这两个题目是重复的,由于+是左结合的,1+2+3等价于(1+2)+3,也就是3+(1+2),也就是3+(2+1)。但是1+2+3和3+2+1是不重复的两道题,因为1+2+3等价于(1+2)+3,而3+2+1等价于(3+2)+1,它们之间不能通过有限次交换变成同一个题目。
    5、把程序变成一个网页程序, 用户通过设定参数,就可以得到各种题目,并可实现在线答题并评判。

    设计思想:
    一:生成类:分数类、整数类、符号类。
       有函数获取值和化简分数。整数里面存在分子和分母,分子为整数值,分母默认为1
    二:主类:化简函数,计算函数,判断函数,主函数(流程函数)
            判断函数用于完成条件1和2
    三:主函数:
    1、定制条件:输入需要的题数。根据题数,以for循环来限制循环次数。(进入for循环)
    2、确定数字个数:以随机数的值(2~4的值)来确定算式的数字个数。
    3、引用之前的类:分数类、整数类、符号类。
                     分数类、整数类、符号类来创建一维数组
                     创建四个二维数组,第一个用来储存分数和整数的分子[][0]和分母[][1]
                                       第二个用来储存分数和整数的分子[][0]和分母[][1](字符串型)
                                       第三个用来储存符号的随机数判断整型
                                       第四个用来储存符号(字符串型)
    4、进入无限循环:
                    1、进入有限循环(循环次数为 数字个数)
                       随机分配整数或分数,都引用函数,创建数值,并将其分子和分母都列入第一个和第二个二维数组
                       随机数生成符号,将其列入第三个和第四个二维数组
                    2、算式运算:根据 数字个数 的不同,进入不同条件的运算
                                 根据 符号位置(数组位置) 的不同,进入不同条件的运算,符号前后两数进行运算,生成分子分母,引用判定函数进行判定,未达成要求,就停止此次循环,进行新的循环
                                 化简,生成分子和分母
                                 (两个数字:直接运算)
                                 (三个数字:1、第二个符号为乘除,先算第二个数字和第三个数字
                                             2、第二个符号不为乘除,从第一个数字算起)
                                 (四个数字:1、第一个符号为乘除,①、第三个符号为乘除,但第二个符号不为乘除,先算第一个数字和第二个数字,第三个数字和第四个数字,最后两者运算
                                                                  ②、第三个符号不为乘除,从第一个数字算起
                                             2、第一个符号不为乘除,①、第二个符号为乘除,但第三个符号不为乘除,先算第二个数字和第三个数字,再从第一个数字算起
                                                                    ②、第二个符号为乘除,且第三个符号为乘除,先算第二个数字和第三个数字,再算第四个数字,最后第一个数字
                                                                    ③、第二个符号不为乘除,但第三个符号为乘除,先算第三个数字和第四个数字,再从第一个数字算起
                                                                    ④、第二个符号不为乘除,且第三个符号也不为乘除,从第一个数字算起)
       退出无限循环
                    3、生成算式(字符串的形式),且将生成的算式的运算结果(字符串型),代入数组中
                    4、判定重复:for循环,此次运算结果与过去所有运算结果比较,若相同,则重复进行一次当前循环,重新运算。
                    5、用户输入值,进行比较,得出正确与否的答案

    源程序代码:
    import java.util.Scanner;
    class Fraction//分数
    {
        public int numerator;//分子
        public int denominator;//分母
        public void creatFraction()
        {    
            //--生成值并化简--
            boolean bool=false;
            while(bool==false)
            {
                int up=(int)(1+Math.random()*10);
                int down=(int)(1+Math.random()*10);
                if(down<=up)
                {
                    continue;
                }
                for(int i=2;;i++)
                {
                    if(up%i==0&&down%i==0)
                    {
                        up/=i;
                        down/=i;
                        i-=1;
                    }
                    if(i>up||i>down)
                    {
                        break;
                    }
                }
                if(down==1)
                {
                    continue;
                }
                else
                {
                    numerator=up;
                    denominator=down;
                    bool=true;
                }
            }
            //--生成值并化简--
        }
        public String strFraction()
        {
            String ud=new String();
            ud="("+numerator+"/"+denominator+")";
            return ud;
        }
        public int getNumerator()
        {
            return numerator;
        }
        public int getDenominator()
        {
            return denominator;
        }
    }
    
    class Integer//整数
    {
        public int integer;
        public int downinteger=1;
        public void creatInteger()
        {
            integer=(int)(1+Math.random()*100);
        }
        public String strInteger()
        {
            String g;
            g=integer+"";
            return g;
        }
        
        public int getInteger()
        {
            int a=integer;
            return a;
        }
        public int getDownInteger()
        {
            int b=downinteger;
            return b;
        }
    }
    
    class Operator//符号
    {
        public String operator;
        public int inoperator;
        public void creatOperator()
        {
            inoperator=(int)(1+Math.random()*4);
            switch(inoperator)
            {
            case 1:{operator="+";break;}
            case 2:{operator="-";break;}
            case 3:{operator="*";break;}
            case 4:{operator="/";break;}
            default:{System.out.println("运行出错,结束");break;}
            }
        }
        public String getOperator()
        {
            String g=operator;
            return g;
        }
        public int getInOperator()
        {
            int g=inoperator;
            return g;
        }
    }
    
    public class Operations4 
    {
        //-----------化简区----------------
        static int upSimple(int sup,int sdown)//化简分子
        {
            boolean bool=false;
            while(bool==false)
            {
                for(int i=2;;i++)
                {
                    if(sup%i==0&&sdown%i==0)
                    {
                        sup/=i;
                        sdown/=i;
                        i-=1;
                    }
                    if(i>sup||i>sdown)
                    {
                        break;
                    }
                }
                bool=true;
            }
            return sup;
        }
        static int downSimple(int sup,int sdown)//化简分母
        {
            boolean bool=false;
            while(bool==false)
            {
                for(int i=2;;i++)
                {
                    if(sup%i==0&&sdown%i==0)
                    {
                        sup/=i;
                        sdown/=i;
                        i-=1;
                    }
                    if(i>sup||i>sdown)
                    {
                        break;
                    }
                }
                bool=true;
            }
            return sdown;
        }
        //--------计算区---------------
        static int getUp(int up1,int down1,int up2,int down2,int fu)//获取计算后的分子
        {
            int up=1,down=1;
            switch(fu)
            {
            case 1:
            {
                up=up1*down2+up2*down1;
                break;
            }
            case 2:
            {
                up=up1*down2-up2*down1;
                break;
            }
            case 3:
            {
                up=up1*up2;
                break;
            }
            case 4:
            {
                up=up1*down2;
                break;
            }
            default:
            {
                System.out.println("运行错误,结束");
                break;
            }
            }
            return up;
        }
            
            static int getDown(int up1,int down1,int up2,int down2,int fu)//获取计算后的分母
            {
                int up=1,down=1;
                switch(fu)
                {
                case 1:
                {
                    down=down1*down2;
                    break;
                }
                case 2:
                {
                    down=down1*down2;
                    break;
                }
                case 3:
                {
                    down=down1*down2;
                    break;
                }
                case 4:
                {
                    down=down1*up2;
                    break;
                }
                default:
                {
                    System.out.println("运行错误,结束");
                    break;
                }
                }
                return down;
            }
            //------判断------
            static int nCont(int nup,int ndown,int nfu)
            {
                int n=1;//达到要求
                if((nfu==2&&nup<ndown)||(nfu==4&&nup>ndown))
                {
                    n=2;//未达要求
                }
                return n;
            }
            
        //--------运算区---------------
        public static void main(String args[])
        {
            System.out.print("请输入需要的题数:");
            Scanner shuzi=new Scanner(System.in);
            int SIZE=shuzi.nextInt();
            String Ends[]=new String[SIZE];
            
            for(int j=0;j<SIZE;j++)
            {
            String strOP=null;
            //-----------确定数字---------
            int number=(int)(2+Math.random()*3);//随机数字个数:2~4个
            //舍弃数组[0]的位置,以下都从数组[1]开始
            Integer zheng[]=new Integer[number+1];
            Fraction fen[]=new Fraction[number+1];
            Operator fuhao[]=new Operator[number];
            
            int Array[][]=new int[number+1][2];
            String strArray[]=new String[number+1];
            
            int inBrray[]=new int[number];
            String strBrray[]=new String[number];
            
            int aup=1,adown=1;
            boolean bl=false;
            while(bl==false)
            {
                for(int i=1;i<=number;i++)//确定数字在数组中
                {
                    int panduan=(int)(1+Math.random()*2);//随机分配整数或分数。1--整数,2--分数
                    //数字划入Array数组
                    if(panduan==1)
                    {
                        zheng[i]=new Integer();
                        zheng[i].creatInteger();
                        Array[i][0]=zheng[i].getInteger();
                        Array[i][1]=zheng[i].getDownInteger();
                        strArray[i]=zheng[i].strInteger();
                    }    
                    if(panduan==2)
                    {
                        fen[i]=new Fraction();
                        fen[i].creatFraction();
                        Array[i][0]=fen[i].getNumerator();
                        Array[i][1]=fen[i].getDenominator();
                        strArray[i]=fen[i].strFraction();
                    }
                    //符号划入Barry数组
                    if(i==number){break;}
                    fuhao[i]=new Operator();
                    fuhao[i].creatOperator();
                    inBrray[i]=fuhao[i].getInOperator();
                    strBrray[i]=fuhao[i].getOperator();
                }
                //---------进行运算----------
                if(number==2)//两个数字
                {
                    int a1,a2;
                    a1=getUp(Array[1][0],Array[1][1],Array[2][0],Array[2][1],inBrray[1]);
                    a2=getDown(Array[1][0],Array[1][1],Array[2][0],Array[2][1],inBrray[1]);
                    
                    int nC=nCont(a1,a2,inBrray[1]);
                    if(nC==2)
                    {continue;}
                    
                    
                    aup=upSimple(a1,a2);
                    adown=downSimple(a1,a2);
                    
                }
                if(number==3)
                {
                    if(inBrray[1]<=2&&inBrray[2]>2)
                    {
                        int b1,b2;
                        b1=getUp(Array[2][0],Array[2][1],Array[3][0],Array[3][1],inBrray[2]);
                        b2=getDown(Array[2][0],Array[2][1],Array[3][0],Array[3][1],inBrray[2]);
                        
                        int nC2=nCont(b1,b2,inBrray[2]);
                        if(nC2==2)
                        {continue;}
                        //---------
                        int a1,a2;
                        a1=getUp(Array[1][0],Array[1][1],b1,b2,inBrray[1]);
                        a2=getDown(Array[1][0],Array[1][1],b1,b2,inBrray[1]);
                        
                        int nC1=nCont(a1,a2,inBrray[1]);
                        if(nC1==2)
                        {continue;}
                        //---------
                        
                        aup=upSimple(a1,a2);
                        adown=downSimple(a1,a2);
                    }
                    else
                    {
                        int a1,a2;
                        a1=getUp(Array[1][0],Array[1][1],Array[2][0],Array[2][1],inBrray[1]);
                        a2=getDown(Array[1][0],Array[1][1],Array[2][0],Array[2][1],inBrray[1]);
                        
                        int nC1=nCont(a1,a2,inBrray[1]);
                        if(nC1==2)
                        {continue;}
                        //---------
                        int b1,b2;
                        b1=getUp(a1,a2,Array[3][0],Array[3][1],inBrray[2]);
                        b2=getDown(a1,a2,Array[3][0],Array[3][1],inBrray[2]);
                        
                        int nC2=nCont(a1,a2,inBrray[2]);
                        if(nC2==2)
                        {continue;}
                        //----------
                        
                        aup=upSimple(b1,b2);
                        adown=downSimple(b1,b2);
                    }
                }
                
                if(number==4)
                {
                    if(inBrray[1]>2)
                    {
                        int a1,a2;
                        a1=getUp(Array[1][0],Array[1][1],Array[2][0],Array[2][1],inBrray[1]);
                        a2=getDown(Array[1][0],Array[1][1],Array[2][0],Array[2][1],inBrray[1]);
                        
                        int nC1=nCont(a1,a2,inBrray[1]);
                        if(nC1==2)
                        {continue;}
                        
                        if(inBrray[2]<=2&&inBrray[3]>2)
                        {
                            int c1,c2;
                            c1=getUp(Array[3][0],Array[3][1],Array[4][0],Array[4][1],inBrray[3]);
                            c2=getDown(Array[3][0],Array[3][1],Array[4][0],Array[4][1],inBrray[3]);
                            
                            int nC3=nCont(c1,c2,inBrray[3]);
                            if(nC3==2)
                            {continue;}
                            //---------
                            int b1,b2;
                            b1=getUp(a1,a2,c1,c2,inBrray[2]);
                            b2=getDown(a1,a2,c1,c2,inBrray[2]);
                            
                            int nC2=nCont(b1,b2,inBrray[1]);
                            if(nC2==2)
                            {continue;}
                            //---------
                            
                            aup=upSimple(b1,b2);
                            adown=downSimple(b1,b2);
                        }
                        else
                        {
                            int b1,b2;
                            b1=getUp(a1,a2,Array[3][0],Array[3][1],inBrray[2]);
                            b2=getDown(a1,a2,Array[3][0],Array[3][1],inBrray[2]);
                            
                            int nC2=nCont(b1,b2,inBrray[2]);
                            if(nC2==2)
                            {continue;}
                            //---------
                            int c1,c2;
                            c1=getUp(b1,b2,Array[4][0],Array[4][1],inBrray[3]);
                            c2=getDown(b1,b2,Array[4][0],Array[4][1],inBrray[3]);
                            
                            int nC3=nCont(c1,c2,inBrray[3]);
                            if(nC3==2)
                            {continue;}
                            //----------
                            
                            aup=upSimple(c1,c2);
                            adown=downSimple(c1,c2);
                        }
                    }
                    else
                    {
                        if(inBrray[2]>2&&inBrray[3]<=2)
                        {
                            int b1,b2;
                            b1=getUp(Array[2][0],Array[2][1],Array[3][0],Array[3][1],inBrray[2]);
                            b2=getDown(Array[2][0],Array[2][1],Array[3][0],Array[3][1],inBrray[2]);
                            
                            int nC2=nCont(b1,b2,inBrray[2]);
                            if(nC2==2)
                            {continue;}
                            //---------
                            int a1,a2;
                            a1=getUp(Array[1][0],Array[1][1],b1,b2,inBrray[1]);
                            a2=getDown(Array[1][0],Array[1][1],b1,b2,inBrray[1]);
                            
                            int nC1=nCont(a1,a2,inBrray[1]);
                            if(nC1==2)
                            {continue;}
                            //----------
                            int c1,c2;
                            c1=getUp(a1,a2,Array[4][0],Array[4][1],inBrray[3]);
                            c2=getDown(a1,a2,Array[4][0],Array[4][1],inBrray[3]);
                            
                            int nC3=nCont(c1,c2,inBrray[3]);
                            if(nC3==2)
                            {continue;}
                            //----------
                            
                            aup=upSimple(c1,c2);
                            adown=downSimple(c1,c2);
                        }
                        else if(inBrray[2]>2&&inBrray[3]>2)
                        {
                            int b1,b2;
                            b1=getUp(Array[2][0],Array[2][1],Array[3][0],Array[3][1],inBrray[2]);
                            b2=getDown(Array[2][0],Array[2][1],Array[3][0],Array[3][1],inBrray[2]);
                            
                            int nC2=nCont(b1,b2,inBrray[2]);
                            if(nC2==2)
                            {continue;}
                            //---------
                            int c1,c2;
                            c1=getUp(b1,b2,Array[4][0],Array[4][1],inBrray[3]);
                            c2=getDown(b1,b2,Array[4][0],Array[4][1],inBrray[3]);
                            
                            int nC3=nCont(c1,c2,inBrray[3]);
                            if(nC3==2)
                            {continue;}
                            //----------
                            int a1,a2;
                            a1=getUp(Array[1][0],Array[1][1],c1,c2,inBrray[1]);
                            a2=getDown(Array[1][0],Array[1][1],c1,c2,inBrray[1]);
                            
                            int nC1=nCont(a1,a2,inBrray[1]);
                            if(nC1==2)
                            {continue;}
                            //----------
                            
                            aup=upSimple(a1,a2);
                            adown=downSimple(a1,a2);
                        }
                        else if(inBrray[2]<=2&&inBrray[3]>2)
                        {
                            int c1,c2;
                            c1=getUp(Array[3][0],Array[3][1],Array[4][0],Array[4][1],inBrray[3]);
                            c2=getDown(Array[3][0],Array[3][1],Array[4][0],Array[4][1],inBrray[3]);
                            
                            int nC3=nCont(c1,c2,inBrray[3]);
                            if(nC3==2)
                            {continue;}
                            //---------
                            int a1,a2;
                            a1=getUp(Array[1][0],Array[1][1],Array[2][0],Array[2][1],inBrray[1]);
                            a2=getDown(Array[1][0],Array[1][1],Array[2][0],Array[2][1],inBrray[1]);
                            
                            int nC1=nCont(a1,a2,inBrray[1]);
                            if(nC1==2)
                            {continue;}
                            //----------
                            int b1,b2;
                            b1=getUp(a1,a2,c1,c2,inBrray[2]);
                            b2=getDown(a1,a2,c1,c2,inBrray[2]);
                            
                            int nC2=nCont(b1,b2,inBrray[2]);
                            if(nC2==2)
                            {continue;}
                            //----------
                            
                            aup=upSimple(b1,b2);
                            adown=downSimple(b1,b2);
                        }
                        else
                        {
                            int a1,a2;
                            a1=getUp(Array[1][0],Array[1][1],Array[2][0],Array[2][1],inBrray[1]);
                            a2=getDown(Array[1][0],Array[1][1],Array[2][0],Array[2][1],inBrray[1]);
                            
                            int nC1=nCont(a1,a2,inBrray[1]);
                            if(nC1==2)
                            {continue;}
                            //---------
                            int b1,b2;
                            b1=getUp(a1,a2,Array[3][0],Array[3][1],inBrray[2]);
                            b2=getDown(a1,a2,Array[3][0],Array[3][1],inBrray[2]);
                            
                            int nC2=nCont(b1,b2,inBrray[2]);
                            if(nC2==2)
                            {continue;}
                            //----------
                            int c1,c2;
                            c1=getUp(b1,b2,Array[4][0],Array[4][1],inBrray[3]);
                            c2=getDown(b1,b2,Array[4][0],Array[4][1],inBrray[3]);
                            
                            int nC3=nCont(c1,c2,inBrray[3]);
                            if(nC3==2)
                            {continue;}
                            //----------
                            
                            aup=upSimple(c1,c2);
                            adown=downSimple(c1,c2);
                        }
                    }
                }
                if(adown==1)
                {
                    strOP=aup+"";
                }
                else
                {
                    strOP=aup+"/"+adown;
                }
                
                bl=true;
            }
            
            String back="";
            for(int i=1;i<=number;i++)
            {
                back+=strArray[i];
                if(i==number){break;}
                back+=strBrray[i];
            }
            System.out.print(back+"=");
            
            String shuchu=strOP;
            
            Ends[j]=shuchu;
            //-------判定重复--------
            int chuqu=1;
            for(int q=0;q<j;q++)
            {
                if(Ends[j]==Ends[q])
                {
                    chuqu=2;
                }
            }
            if(chuqu==2)
            {
                j--;
                continue;
            }
            //--------
            Scanner sca=new Scanner(System.in);
            String shuru=sca.next();
            if(shuchu.equals(shuru))
            {
                System.out.println("正确");
            }
            else
            {
                System.out.println("错误,正确答案为:"+shuchu);
            }
        }
        }
        
    }
    运行结果截图:

    编程总结或体会:
    这一次的编程当中,在之前的程序上有了很大的进步,把括号的实现的跟完美,花了很多的时间实现功能,但是在用java编好之后,本来以为可以很方便的弄到网页上去,但是我们天真的,对于jsp和java之间的交互了解和知道的甚少,所以现在还没将java程序很好的嵌入到网页上去,之后学习熟悉了将完成这个功能。

    周活动总结表

    
    

      姓名:王艺霖     日期 2016/4/8

    
    
      听课 编写代码 阅读课本 准备考试     日总计
    周日              
    周一              
    周二  100 110         210
    周三   140 30       170
    周四   107  30       237
    周五   231         331
    周六   120         120
    周总计  100 708  60        868
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

                                                               

      时间记录日志

      学生:王艺霖  日期:2016/4/8

      教师:王建民  课程:软件工程

    日期

    开始时间

    结束时间

    中断时间

    净时间

    活动

    备注

    C

    U

    4/3

     

     

     

     

     

     

     

     

    4/4

     

     

     

     

     

     

     

     

    4/5

    14:00

    15:50

    10

    100

    听课

     

     

     

    4/5

    16:14

    17:57

    10

    103

    编程序

    课堂测试

     

     

     

    4/6

    15:00

    17:30

    10

    140

    编程序

    网页

     

     

     

    4/7

    18:10

    21:43

    10

    203

    结对编程序

    休息

     

     

    4/8

    16:30

    18:00

    10

    80

    结对编程序

    休息

     

     

    4/8

    19:11

    23:40

    11

    258

    结对编程序

    聊天

     

     

    4/9

    14:17

    17:52

    13

    202

    编程

     

     

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    


  • 相关阅读:
    php5升级到php7 后对于mysql数据库的关联出现问题的解决方案
    关于js与php互相传值的介绍【转载+自身总结】
    PHP页面间参数传递的四种方法详解
    很久没更新博客了, 明天开始恢复更新。
    SQL 行转列
    oracle 记录被别的用户锁住
    IIS32位,64位模式下切换
    Oracle 分页
    Oracel 提取数字
    Win8 做无线热点
  • 原文地址:https://www.cnblogs.com/mengqimoli/p/5371228.html
Copyright © 2020-2023  润新知