软件工程个人作业03

Posted yy&

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件工程个人作业03相关的知识,希望对你有一定的参考价值。

小组成员:严羽卿、杨茵

工作照片:

技术分享               技术分享

设计思想:

1.在进行不加括号的运算时,我们可以通过产生的表达式直接求得正确值,然后跟用户输入的值进行比较;

2.在进行有括号的运算时,我们可以通过循环求得每一轮循环所得值,并存放入数组中;再通过判断每一次循环后的运算符,来决定数组值之间的加减乘除,以求得最后正确值,然后跟用户输入的值进行比较。

源程序代码:

 

import java.util.Scanner;
import java.util.ArrayList;
public class Test {
    public static void main(String[] args){
        int N,i,N1,N2;
        int sum=0;
        String str;
        String hh;    
        Scanner in=new Scanner(System.in);    
        change fra=new change();
        System.out.println("请输入需要打印的运算题的数目:");
        N=in.nextInt();
        System.out.println("请选择是否需要分数运算(Y/N):");
        hh=in.next();
        if(hh.equals("Y"))//分数运算
        {
            for(i=0;i<N;i++)
            {            
                int a,b,c,d;
                int s1,s2;
                a=(int) (Math.random()*100);
                b=(int) (Math.random()*99+1);
                //分母不等于0
                c=(int) (Math.random()*100);
                d=(int) (Math.random()*99+1);
                int h=(int)(Math.random()*4);
                int aa=0,bb=0,cc=0,dd=0;
                //为了产生分数,分子也不可为零
                if(a==0)
                    a=(int) (Math.random()*99+1);
                if(c==0)
                    c=(int) (Math.random()*99+1);
                //化简分数
                int j;
                j=fra.change_(a,b);
                aa=a/j;
                bb=b/j;
                //化简分数
                int p;
                p=fra.change_(c,d);
                cc=c/p;
                dd=d/p;
                int j1;
                int s11,s22;
                String str1;
                if(h==0)
                {   
                    //化简后,分母等于1时,直接输出分子
                    if(bb!=1&&dd!=1)
                        System.out.println(aa+"/"+bb+" + "+cc+"/"+dd+"=");
                        
                    else if(bb==1&&dd!=1)
                        System.out.println(aa+" + "+cc+"/"+dd+"=");
                    
                    else if(bb!=1&&dd==1)
                        System.out.println(aa+"/"+bb+" + "+cc+"=");
                        
                    else
                        System.out.println(aa+"+"+cc+"=");
                    //分数加法计算
                      s1=aa*dd+bb*cc;
                      s2=bb*dd;
                      j1=fra.change_(s1,s2);
                      s11=s1/j1;
                      s22=s2/j1;
                      str1=s11+"/"+s22;
                      str=in.next();
                      if(fra.judge_FRA(str1,str)==1)
                      {
                         sum++;
                      }
                      System.out.println("正确"+sum+"道题.");            
                }
                else if(h==1)
                {
                    //不能产生负数
                    int t1,t2;
                    if((a/b-c/d)<0)
                    {
                        t1=aa;
                        aa=cc;
                        cc=t1;
                        t2=bb;
                        bb=dd;
                        dd=t2;
                    }
                    
                    //化简后,分母等于1时,直接输出分子    
                    if(bb!=1&&dd!=1)
                        System.out.println(aa+"/"+bb+" - "+cc+"/"+dd+"=");                        
                    else if(bb==1&&dd!=1)
                        System.out.println(aa+" - "+cc+"/"+dd+"=");
                    else if(bb!=1&&dd==1)
                        System.out.println(aa+"/"+bb+" - "+cc+"=");
                    else
                        System.out.println(aa+"-"+cc+"=");
                    //分数减法计算
                    s1=aa*dd-bb*cc;
                    s2=bb*dd;
                    j1=fra.change_(s1,s2);
                    s11=s1/j1;
                    s22=s2/j1;
                    str1=s11+"/"+s22;
                    str=in.next();
                    if(fra.judge_FRA(str1,str)==1)
                    {
                        sum++;
                    }
                    System.out.println("正确"+sum+"道题.");
                }
                else if(h==2)
                {
                    
                    //化简后,分母等于1时,直接输出分子
                    if(bb!=1&&dd!=1)
                        System.out.println(aa+"/"+bb+" * "+cc+"/"+dd+"=");

                    else if(bb==1&&dd!=1)
                        System.out.println(aa+" * "+cc+"/"+dd+"=");
             
                    else if(bb!=1&&dd==1)
                        System.out.println(aa+"/"+bb+" * "+cc+"=");
                        
                    else
                        System.out.println(aa+"*"+cc+"=");
                    //分数乘法计算
                    s1=aa*cc;
                    s2=bb*dd;
                    j1=fra.change_(s1,s2);
                    s11=s1/j1;
                    s22=s2/j1;
                    str1=s11+"/"+s22;
                    str=in.next();
                    if(fra.judge_FRA(str1,str)==1)
                    {
                        sum++;
                    }
                    System.out.println("正确"+sum+"道题.");
                }
                else
                { 
                    
                    //化简后,分母等于1时,直接输出分子
                    if(bb!=1&&dd!=1)
                        System.out.println("("+aa+"/"+bb+")"+" / "+"("+cc+"/"+dd+")"+"=");
                     
                    else if(bb==1&&dd!=1)
                        System.out.println(aa+" / "+"("+cc+"/"+dd+")"+"=");
                        
                    else if(bb!=1&&dd==1)
                        System.out.println("("+aa+"/"+bb+")"+" / "+cc+"=");
                        
                    else
                        System.out.println(aa+"/"+cc+"=");
                    //分数除法计算
                    s1=aa*dd;
                    s2=bb*cc;
                    j1=fra.change_(s1,s2);
                    s11=s1/j1;
                    s22=s2/j1;
                    str1=s11+"/"+s22;
                    str=in.next();
                    if(fra.judge_FRA(str1,str)==1)
                    {
                        sum++;
                    }
                    System.out.println("正确"+sum+"道题.");
                }
            }
        }
        else if(hh.equals("N"))//整数运算
        {
            System.out.println("请选择是否需要产生括号的运算题(Y/N):");
            String str1,str2,str3;
            double strr2;
            str=in.next();
            double strr1=0;
            double ss;
            if(str.equals("Y"))
            {
                System.out.println("请输入数值范围:");
                N1=in.nextInt();
                for(i=0;i<N;i++)
                {
                    ArrayList<Integer> al1=new ArrayList<Integer>();
                    //申请动态数组存放操作数
                    ArrayList<Integer> al2=new ArrayList<Integer>();
                    //申请动态数组存放运算符
                    int m,n,a,b;
                    int j,k;
                    m=(int) (Math.random()*7+3);
                    //限制操作数个数
                    n=m-1;
                    //运算符个数
                    for(j=0;j<m;j++)
                    {
                        a=(int) (Math.random()*(N1-1)+1);
                        al1.add(a);
                    }//将操作数压入al1数组
                    
                    for(k=0;k<n;k++)
                    {
                        b=(int) (Math.random()*4);
                        al2.add(b);
                    }//将运算符压入al2数组
                    if(m==3)//产生的操作数是3个
                    {
                        if((int)al2.get(0)>(int)al2.get(1))//比较优先级
                        {
                            if((int)al2.get(0)==1)
                            {
                                System.out.print((int)al1.get(0)+"-"+(int)al1.get(1)+"+"+(int)al1.get(2));
                                strr1=(int)al1.get(0)-(int)al1.get(1)+(int)al1.get(2);
                            }                            
                            else if((int)al2.get(0)==2)
                            {
                                if((int)al2.get(1)==0)
                                {
                                    System.out.print((int)al1.get(0)+"*"+"("+(int)al1.get(1)+"+"+(int)al1.get(2)+")");
                                    strr1=(int)al1.get(0)*((int)al1.get(1)+(int)al1.get(2));
                                }
                                else if((int)al2.get(1)==1)
                                {
                                    System.out.print((int)al1.get(0)+"*"+"("+(int)al1.get(1)+"-"+(int)al1.get(2)+")");
                                    strr1=(int)al1.get(0)*((int)al1.get(1)-(int)al1.get(2));
                                }
                            }
                            else if((int)al2.get(0)==3)
                            {
                                if((int)al2.get(1)==0)
                                {
                                    System.out.print((int)al1.get(0)+"/"+"("+(int)al1.get(1)+"+"+(int)al1.get(2)+")");
                                    strr1=(int)al1.get(0)/((int)al1.get(1)+(int)al1.get(2));
                                }
                                else if((int)al2.get(1)==1)
                                {
                                    System.out.print((int)al1.get(0)+"/"+"("+(int)al1.get(1)+"-"+(int)al1.get(2)+")");
                                    strr1=(int)al1.get(0)/((int)al1.get(1)-(int)al1.get(2));
                                }
                                if((int)al2.get(1)==2)
                                {
                                    System.out.print((int)al1.get(0)+"/"+(int)al1.get(1)+"*"+(int)al1.get(2));
                                    strr1=(int)al1.get(0)/(int)al1.get(1)*(int)al1.get(2);
                                }
                            }
                        }
                        else if((int)al2.get(0)<(int)al2.get(1)||(int)al2.get(0)==(int)al2.get(1))//比较优先级
                        {
                            if((int)al2.get(0)==0)
                            {
                                if((int)al2.get(1)==0)
                                {
                                    System.out.print((int)al1.get(0)+"+"+(int)al1.get(1)+"+"+(int)al1.get(2));
                                    strr1=(int)al1.get(0)+(int)al1.get(1)+(int)al1.get(2);
                                }
                                else if((int)al2.get(1)==1)
                                {
                                    System.out.print((int)al1.get(0)+"+"+(int)al1.get(1)+"-"+(int)al1.get(2));
                                    strr1=(int)al1.get(0)+(int)al1.get(1)-(int)al1.get(2);
                                }
                                else if((int)al2.get(1)==2)
                                {
                                    System.out.print((int)al1.get(0)+"+"+(int)al1.get(1)+"*"+(int)al1.get(2));
                                    strr1=(int)al1.get(0)+(int)al1.get(1)*(int)al1.get(2);
                                }
                                else if((int)al2.get(1)==3)
                                {
                                    System.out.print((int)al1.get(0)+"+"+(int)al1.get(1)+"/"+(int)al1.get(2));
                                    strr1=(int)al1.get(0)+(int)al1.get(1)/(int)al1.get(2);
                                }
                            }
                            else if((int)al2.get(0)==1)
                            {
                                if((int)al2.get(1)==1)
                                {
                                    System.out.print((int)al1.get(0)+"-"+(int)al1.get(1)+"-"+(int)al1.get(2));
                                    strr1=(int)al1.get(0)-(int)al1.get(1)-(int)al1.get(2);
                                }
                                else if((int)al2.get(1)==2)
                                {
                                    System.out.print((int)al1.get(0)+"-"+(int)al1.get(1)+"*"+(int)al1.get(2));
                                    strr1=(int)al1.get(0)-(int)al1.get(1)*(int)al1.get(2);
                                }
                                else if((int)al2.get(1)==3)
                                {
                                    System.out.print((int)al1.get(0)+"-"+(int)al1.get(1)+"/"+(int)al1.get(2));
                                    strr1=(int)al1.get(0)-(int)al1.get(1)/(int)al1.get(2);
                                }
                            }
                            else if((int)al2.get(0)==2)
                            {
                                if((int)al2.get(1)==2)
                                {
                                    System.out.print((int)al1.get(0)+"*"+(int)al1.get(1)+"*"+(int)al1.get(2));
                                    strr1=(int)al1.get(0)*(int)al1.get(1)*(int)al1.get(2);
                                }
                                else if((int)al2.get(1)==3)
                                {
                                    System.out.print((int)al1.get(0)+"*"+(int)al1.get(1)+"/"+(int)al1.get(2));
                                    strr1=(int)al1.get(0)*(int)al1.get(1)/(int)al1.get(2);
                                }
                            }
                            else if((int)al2.get(0)==3)
                            {
                                System.out.print((int)al1.get(0)+"/"+"("+(int)al1.get(1)+"/"+(int)al1.get(2)+")");
                                strr1=(int)al1.get(0)/((int)al1.get(1)/(int)al1.get(2));
                            }
                        }
                        System.out.print("=");
                        ss=in.nextDouble();
                        if(fra.judge(strr1,ss)==1)
                        {
                            sum++;
                        }
                        System.out.println("正确"+sum+"道题.");
                    }
                    else if(m>=4)//产生的操作大于等于4个
                    {
                        double sumss=0;
                        int r;
                        int rr=0;
                        int jj;
                        double list[]=new double[7];//存放和
                        double sums[]=new double[4];
                        for(r=0;r<7;r++)
                        {
                            list[r]=0;
                        }
                        for(r=0;r<4;r++)
                        {
                            sums[r]=0;
                        }
                        if(al2.size()%2==0)
                        {
                            jj=al2.size()/2;
                        }
                        else
                            jj=(al2.size()-1)/2;
                        for(j=0;j<=jj;j=j+2)//输出运算表达式
                        {
                            k=j;
                            if((int)al2.get(j+2)==2||(int)al2.get(j+2)==3)
                            {
                                list[j+1]=1;
                                sums[rr+1]=1;
                            }
                             list[jj]=(int)al1.get(al1.size()-1);
                            System.out.print("(");
                            if((int)al2.get(j)>(int)al2.get(j+1))//比较运算符优先级
                            {
                                if((int)al2.get(j)==1)//第一个出现减法
                                {
                                    System.out.print((int)al1.get(k)+"-"+(int)al1.get(k+1)+"+"+(int)al1.get(k+2));
                                    list[j]=(int)al1.get(k)-(int)al1.get(k+1)+(int)al1.get(k+2);
                                }
                                else if((int)al2.get(j)==2)//第一个出现乘法
                                {
                                    if((int)al2.get(j+1)==0)
                                    {
                                        System.out.print((int)al1.get(k)+"*"+"("+(int)al1.get(k+1)+"+"+(int)al1.get(k+2)+")");
                                        list[j]=(int)al1.get(k)*+((int)al1.get(k+1)+(int)al1.get(k+2));
                                    }
                                    else if((int)al2.get(j+1)==1)
                                    {
                                        System.out.print((int)al1.get(k)+"*"+"("+(int)al1.get(k+1)+"-"+(int)al1.get(k+2)+")");
                                        list[j]=(int)al1.get(k)*((int)al1.get(k+1)-(int)al1.get(k+2));
                                    }
                                }
                                else if((int)al2.get(j)==3)//第一个出现除法
                                {
                                    if((int)al2.get(j+1)==0)
                                    {
                                        System.out.print((int)al1.get(k)+"/"+"("+(int)al1.get(k+1)+"+"+(int)al1.get(k+2)+")");
                                        list[j]=(int)al1.get(k)/((int)al1.get(k+1)+(int)al1.get(k+2));
                                    }
                                    else if((int)al2.get(j+1)==1)
                                    {
                                        if((int)al1.get(k+1)==(int)al1.get(k+2))
                                        {
                                            System.out.print((int)al1.get(k)+"/"+"("+((int)al1.get(k+1)+1)+"-"+(int)al1.get(k+2)+")");
                                            list[j]=(int)al1.get(k)/(((int)al1.get(k+1)+1)-(int)al1.get(k+2));
                                        }
                                        else 
                                        {
                                            System.out.print((int)al1.get(k)+"/"+"("+(int)al1.get(k+1)+"-"+(int)al1.get(k+2)+")");
                                            list[j]=(int)al1.get(k)/((int)al1.get(k+1)-(int)al1.get(k+2));
                                        }
                                    }
                                    if((int)al2.get(j+1)==2)
                                    {
                                        System.out.print((int)al1.get(k)+"/"+(int)al1.get(k+1)+"*"+(int)al1.get(k+2));
                                        list[j]=(int)al1.get(k)/(int)al1.get(k+1)*(int)al1.get(k+2);
                                    }
                                }
                            }
                            else if((int)al2.get(j)<(int)al2.get(j+1)||(int)al2.get(j)==(int)al2.get(j+1))
                            {
                                if((int)al2.get(j)==0)
                                {
                                    if((int)al2.get(j+1)==0)//第一个出现加法
                                    {
                                        System.out.print((int)al1.get(k)+"+"+(int)al1.get(k+1)+"+"+(int)al1.get(k+2));
                                        list[j]=(int)al1.get(k)+(int)al1.get(k+1)+(int)al1.get(k+2);
                                    }
                                    else if((int)al2.get(j+1)==1)
                                    {
                                        System.out.print((int)al1.get(k)+"+"+(int)al1.get(k+1)+"-"+(int)al1.get(k+2));
                                        list[j]=(int)al1.get(k)+(int)al1.get(k+1)-(int)al1.get(k+2);
                                    }
                                    else if((int)al2.get(j+1)==2)
                                    {
                                        System.out.print((int)al1.get(k)+"+"+(int)al1.get(k+1)+"*"+(int)al1.get(k+2));
                                        list[j]=(int)al1.get(k)+(int)al1.get(k+1)*(int)al1.get(k+2);
                                    }
                                    else if((int)al2.get(j+1)==3)
                                    {
                                        System.out.print((int)al1.get(k)+"+"+(int)al1.get(k+1)+"/"+(int)al1.get(k+2));
                                        list[j]=(int)al1.get(k)+(int)al1.get(k+1)/(int)al1.get(k+2);
                                    }
                                }
                                else if((int)al2.get(j)==1)//第一个出现减法
                                {
                                    if((int)al2.get(j+1)==1)
                                    {
                                        System.out.print((int)al1.get(k)+"-"+(int)al1.get(k+1)+"-"+(int)al1.get(k+2));
                                        list[j]=(int)al1.get(k)-(int)al1.get(k+1)-(int)al1.get(k+2);
                                    }
                                    else if((int)al2.get(j+1)==2)
                                    {
                                        System.out.print((int)al1.get(k)+"-"+(int)al1.get(k+1)+"*"+(int)al1.get(k+2));
                                        list[j]=(int)al1.get(k)-(int)al1.get(k+1)*(int)al1.get(k+2);
                                    }
                                    else if((int)al2.get(j+1)==3)
                                    {
                                        System.out.print((int)al1.get(k)+"-"+(int)al1.get(k+1)+"/"+(int)al1.get(k+2));
                                        list[j]=(int)al1.get(k)-(int)al1.get(k+1)/(int)al1.get(k+2);
                                    }
                                }
                                else if((int)al2.get(j)==2)//第一个出现乘法
                                {
                                    if((int)al2.get(j+1)==2)
                                    {
                                        System.out.print((int)al1.get(k)+"*"+(int)al1.get(k+1)+"*"+(int)al1.get(k+2));
                                        list[j]=(int)al1.get(k)*(int)al1.get(k+1)*(int)al1.get(k+2);
                                    }
                                    else if((int)al2.get(j+1)==3)
                                    {
                                        System.out.print((int)al1.get(k)+"*"+(int)al1.get(k+1)+"/"+(int)al1.get(k+2));
                                        list[j]=(int)al1.get(k)*(int)al1.get(k+1)/(int)al1.get(k+2);
                                    }
                                }
                                else if((int)al2.get(j)==3)//第一个出现除法
                                {
                                    System.out.print((int)al1.get(k)+"/"+"("+(int)al1.get(k+1)+"/"+(int)al1.get(k+2)+")");
                                    list[j]=(int)al1.get(k)/((int)al1.get(k+1)/(int)al1.get(k+2));
                                }
                            }
                            System.out.print(")");
                            if((int)al2.get(j+2)==0)
                            {
                                System.out.print("+");
                                sums[rr]=list[j];
                                sums[jj]=(int)al1.get(al1.size()-1);
                            }    
                            else if((int)al2.get(j+2)==1)
                            {
                                System.out.print("-");
                                sums[rr]=list[j];
                                sums[jj]=(int)al1.get(al1.size()-1);
                            }
                            else if((int)al2.get(j+2)==2)
                            {
                                System.out.print("*");
                                sums[rr]=list[j]*list[j+1];
                            }
                            else if((int)al2.get(j+2)==3)
                            {
                                System.out.print("/");
                                sums[rr]=list[j]/list[j+1];
                            }
                            rr++;
                            j++;
                        /*    if((int)al2.get(al1.size()-1)==0||(int)al2.get(al1.size()-1)==1)
                            {
                                sums[jj]=(int)al1.get(al1.size()-1);
                            }*/
                        }
                        int rrr=1;
                        sumss=sums[0];
                        for(j=0;j<jj;j=j+2)
                        {
                            if((int)al2.get(j+2)==0)
                            {
                                sumss+=sums[rrr];
                            }
                            else if((int)al2.get(j+2)==1)
                            {
                                sumss=sumss-sums[rrr];
                            }
                            else if((int)al2.get(j+2)==2)
                            {
                                sumss=sumss*sums[rrr];
                            }
                            else if((int)al2.get(j+2)==2)
                            {
                                sumss=sumss/sums[rrr];
                            }
                        }
                        System.out.print((int)al1.get(al1.size()-1));
                        //输出最后一位操作数
                        System.out.print("=");
                        strr1=in.nextDouble();
                        if(fra.judge(sumss,strr1)==1)
                        {
                            sum++;
                        }
                        System.out.println(sumss);
                        System.out.println("正确"+sum+"道题.");            
                    }
                }
            }
            
            else if(str.equals("N"))//不需要产生括号
            {
                System.out.println("请输入数值范围:");
                N2=in.nextInt();
                System.out.println("请选择是否有无乘除法的运算题(Y/N):");
                str1=in.next();
                if(str1.equals("Y"))//有乘除法
                {                
                    System.out.println("请选择是否有无余数的运算题(Y/N):");
                    str2=in.next();    
                    
                    if(str2.equals("Y"))//需要有余数
                    {
                        System.out.println("请选择是否有负数(Y/N):");
                        str3=in.next();
                        for(i=0;i<N;i++)
                        {
                            int a,b,c,c1,h,h2;
                            a=(int) (Math.random()*N2);
                            b=(int) (Math.random()*N2);
                            h=(int) (Math.random()*4);
                            //控制加减运算符
                            c=(int) (Math.random()*(N2-1)+1);
                            c1=(int) (Math.random()*10+1);
                            //控制倍数
                            
                            if(str3.equals("Y"))//有负数
                            {
                                if(h==0)//加法
                                {
                                    h2=(int) (Math.random()*2);
                                    //控制有无负数
                                    if(h2==0)
                                    {
                                        System.out.println(a+"+"+b+"=");
                                        double s;
                                        s=a+b;
                                        strr2=in.nextDouble();
                                        if(fra.judge(s,strr2)==1)
                                        {
                                            sum++;
                                        }
                                        
                                    }
                                    else if(h2==1)
                                    {
                                        System.out.println("-"+a+"+"+b+"=");
                                        double s;
                                        s=-a+b;
                                        strr2=in.nextDouble();
                                        if(fra.judge(s,strr2)==1)
                                        {
                                            sum++;
                                        }
                                        
                                    }
                                }
                                if(h==1)//减法
                                {
                                    h2=(int) (Math.random()*2);
                                    //控制有无负数
                                    if(h2==0)
                                    {
                                        System.out.println(a+"-"+b+"=");
                                        double s;
                                        s=a-b;
                                        strr2=in.nextDouble();
                                        if(fra.judge(s,strr2)==1)
                                        {
                                            sum++;
                                

以上是关于软件工程个人作业03的主要内容,如果未能解决你的问题,请参考以下文章

团队总结

软件需求与分析课堂讨论一

团队第二次冲刺第五天

团队第二次冲刺第六天

团队第二次冲刺第二天

团队第二次冲刺第七天