• 软件工程概论个人作业02


       

    第一次编程自己用的是分年级来判断程度,所以先加了数值范围和加减有无复数的判断,没有加入别的判断,由于个人原因括号没有加。

    设计思想:根据年级判断难易程度,通过函数封装(但是发现自己对函数不敏感,没有养成封装函数的习惯)来产生随机数产生和验证等

    源程序代码:

    package sizeyunsuan2;
    
    import java.util.*;
    import javax.script.*;
    
    public class sizeyunsuan {
        
        static ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript");//用于计算答案
        static Scanner scan=new Scanner(System.in);
        static String fuhao[]={"+","-","*","/"};//运算符数组;
     
        public static void main(String[] args) throws ScriptException {
            // TODO Auto-generated method stub
            int M=0,N1=0;//题的难度
            int cuo1,cuo2,cuo=0;
            int x=0;
            while(x==0){
                System.out.print("1.二年级		2.三年级		3.四年级		0.退出
    
    请选择四则运算题目难度:   ");
                int chengdu=scan.nextInt();
                if(chengdu==1)
                    {M=50;}
                else if(chengdu==2)
                    {M=100;}
                else if(chengdu==3)
                {M=100;N1=100;}
                if(chengdu==0) {System.out.println("...退出答题!");
                break;}
                else if(chengdu==1 || chengdu==2){
                    System.out.print("整数的四则运算题目数量:");
                    int N=scan.nextInt();//定题量
                    switch(chengdu){
                    case 1:
                        cuo1=Two(M,N);
                        System.out.println();
                        System.out.println("共错了"+cuo1+"道题,继续努力!");
                        break;
                    case 2:
                        cuo1=Three(M,N);
                        System.out.println();
                        System.out.println("共错了"+cuo1+"道题,继续努力!");
                        break;
                    default:System.out.println("输入有误!请重新输入!");break;
                    }
                }
                else if(chengdu==3){
                    System.out.print("整数的四则运算题目数量:");
                    int N=scan.nextInt();
                    System.out.print("真分数的四则运算题目数量:");
                    int n=scan.nextInt();//定题量
                    System.out.println("*******************************************************");
                    System.out.println("
    答题开始...
    ");
                    switch(chengdu){
                    case 3:
                        cuo1=Four(M,N);
                        System.out.println();
                        cuo2=FourZ(N1,n);
                        cuo=cuo1+cuo2;
                        System.out.println("共错了"+cuo+"道题,继续努力!");
                        break;
                    default:System.out.println("输入有误!请重新输入!");break;
                    }
                    }
                else{
                    System.out.println("输入格式有误!请输入(0或1或2或3)");
                }
            }
    }
        
        public static int Two(int M,int N) throws ScriptException{
            int dui=0;//做对的题目
            String zuocuo="";//做错的题目
            String suan[]=new String[N];//算式
            int key[]=new int[N];//答案
            String K[]=new String[N];
            System.out.println();
            System.out.println("一、整数的四则运算。");
            for(int i=0;i<N;i++){
             int z=(int) (Math.random()*4);
             if(z==3){//z==3
                int ff=0;
                int x=(int)(Math.random()*M); 
                int shuzu[]=new int[100];//存储因子的数组
                for(int a=1;a<x;a++){
                    if(x%a==0)//是因子
                    {shuzu[ff]=a;ff++;}//存储到数组里去
                int y=(int)(Math.random()*ff);//随机产生数组的下标
                   suan[i]=x+"/"+shuzu[y]+"=";
                   key[i]=x/shuzu[y];
                }
             }
            else{
               int x=(int)(Math.random()*M); 
               int y=(int)(Math.random()*M);
               suan[i]=x+fuhao[z]+y+"=";
                  if(z==0){key[i]=x+y;}
                  if(z==1){key[i]=x-y;
                  if(key[i]<0) {
                      suan[i]=y+fuhao[z]+x+"=";
                      key[i]=y-x;
                  }
                      }
                  if(z==2) {key[i]=x*y;}
            }
    
          }
            
            
            //避免重复
            for(int j=0;j<N;j++){
                for(int k=j+1;k<N-1;k++){
                    int F=isF(suan[j]);
                    int FF=isF(suan[k]);
                    
                    if(F==FF)
                    {    
                        int we=panduan(suan[j]);int l=suan[j].length();
                        int h=panduan(suan[k]);int ll=suan[k].length();
                        
                        //用于验证
                        
                        if(((suan[j].substring(0,we-1)).equals(suan[k].substring(0, h-1))&&
                                (suan[j].substring(we+2,l-1)).equals(suan[k].substring(h+2,ll-1)))||
                                ((suan[j].substring(0,we-1)).equals(suan[k].substring(h+2, ll-1))&&
                                        (suan[j].substring(we+2,l-1)).equals(suan[k].substring(0, h-1))))
                        {
                            int x2=(int)(Math.random()*M); 
                            int y2=(int)(Math.random()*M);
                            int z2=(int)(Math.random()*4);
                            if(z2!=3){
                            suan[k]=x2+fuhao[z2]+y2+"=";
                            if(z2==0){key[k]=x2+y2;}
                              else if(z2==1){
                                  key[k]=x2-y2;
                                   if(key[k]<0) {
                                      suan[k]=y2+fuhao[k]+x2+"=";
                                      key[k]=y2-x2;
                                  }
                                  }
                            else if(z2==2) {key[k]=x2*y2;}
                            }
                 else{
                     int ff=0;
                    int xz2=(int)(Math.random()*M);
                    int shuzu2[]=new int[10];//存储因子的数组
                    for(int a=1;a<xz2;a++){
                        if(xz2%a==0)//是因子
                            {shuzu2[ff]=a;ff++;}//存储到数组里去
                    int yz2=(int)(Math.random()*ff);//随机产生数组的下标
                    suan[k]=xz2+"/"+shuzu2[yz2]+"=";
                    key[k]=xz2/shuzu2[yz2];
                    }
                     }
                        }
                }
            }
            }
            
            for(int m=0;m<N;m++){
                System.out.print(m+1+".  "+suan[m]);
                K[m]=scan.next();
                if(yanzheng(K[m],key[m])==1){
                    System.out.println("答题正确!");
                    dui++;
                }
                else{
                    System.out.println("答案错误,正确答案为:"+key[m]);
                    zuocuo+=" "+(m+1);
                }
                System.out.println();
            }
            System.out.println("做对了"+dui+"道题,做错了"+(N-dui)+"道题,题号"+zuocuo+"的答案错误。");
            
            
                return (N-dui);  
        }
        
        public static int Three(int M,int N) throws ScriptException{
            int dui=0;//做对的题目
            String zuocuo="";//做错的题目
            String suan[]=new String[N];//算式
            String output;
            String yu="";
            String shang="";
            String key[]=new String[N];//答案
            for(int i=0;i<N;i++){
                key[i]="0";
            }
            int shu[]=new int[M];//一个式子中产生的数字的个数
            int fu[]=new int[shu.length-1];//一个式子中产生符号的个数(首先用符号表示)
            String K[]=new String[N];
            System.out.println("一、整数的四则运算。(可四舍五入)");
            for(int i=0;i<N;i++){
                int s=(int)(Math.random()*3)+2;//2~5个数字
                String out[]=new String[2*s-1];
                output="";
                int kkk=Integer.parseInt(key[i]);//用于防止出现负数
                while(kkk<=0){
                for(int j=0;j<s;j++){
                    if(j==0)
                    {shu[j]=suiji(M);//生成s个随机数
                    }
                    else{
                        shu[j]=suiji(M);
                    }
                }
                for(int j2=0;j2<s-1;j2++){
                    fu[j2]=suiji(4);
                }
               for(int i2=0;i2<2*s-1;i2++){//输出算式
                  if(i2%2==0){
                      out[i2]=String.valueOf(shu[i2/2]);
                  }
                  else{
                      out[i2]=fuhao[fu[(i2+1)/2]];
                  } 
                  output+=out[i2];
               }
              key[i]=(jse.eval(output)).toString();
              if(IS(key[i])==1){//如果是小数
                 key[i]=QU(key[i]);
              }
               suan[i]=output+"=";
            }
            }
            //避免重复
            for(int j=0;j<N;j++){
                for(int k=j+1;k<N-1;k++){
                    if(suan[j].equals(suan[k])){
                        int s=(int)(Math.random()*3)+2;//2~5个数字
                        String out[]=new String[2*s-1];
                        output="";
                        for(int j2=0;j2<s;j2++){
                            if(j2==0)
                            {shu[j2]=suiji(M);//生成s个随机数
                            }
                            else{
                                shu[j2]=suiji(M);
                            }
                        }
                        for(int j2=0;j2<s-1;j2++){
                            fu[j2]=suiji(4);
                        }
                       for(int i2=0;i2<2*s-1;i2++){//输出算式
                          if(i2%2==0){
                              out[i2]=String.valueOf(shu[i2/2]);
                          }
                          else{
                              out[i2]=fuhao[fu[(i2+1)/2]];
                          } 
                          output+=out[i2];
                       }
                      key[k]=(jse.eval(output)).toString();
                      if(IS(key[k])==1){//如果是小数
                             key[k]=QU(key[k]);
                          }//if
                           suan[k]=output+"=";
                    }
                }
            }
            
            for(int i=0;i<N;i++){
                System.out.print(i+1+".  "+suan[i]);
                K[i]=scan.next();
                if(K[i].equals(key[i])){
                    System.out.println("Bingo!");
                    dui++;
                }
                else{
                    System.out.println("Wrong! THE KEY:"+key[i]);
                    zuocuo+=" "+(i+1);
                }
                System.out.println();
            }
            System.out.println("做对了"+dui+"道题,做错了"+(N-dui)+"道题,题号"+zuocuo+"的答案错误。");
            return (N-dui);
        }
    
        public static int Four(int M,int N) throws ScriptException{
            int dui=0;//做对的题目
            String zuocuo="";//做错的题目
            String suan[]=new String[N];//算式
            String output;
            int shang=0;
            int f=0;
            int yu=0;
            String key[]=new String[N];//答案
            int shu[]=new int[M];//一个式子中产生的数字的个数
            int fu[]=new int[shu.length-1];//一个式子中产生符号的个数(首先用符号表示)
            String K[]=new String[N];
            System.out.println("一、整数的四则运算。(有余数时格式:3余1)");
            for(int i=0;i<N;i++){
                int s=(int)(Math.random()*8)+2;//2~10个数字
                if(s==2){//如果产生两个数字
                    f=suiji(4);//产生符号
                    output="";
                        shu[0]=suiji(M);//生成2个随机数
                        shu[1]=suiji(shu[0]);
                    if(f==3){
                        output=shu[0]+"/"+shu[1];
                        suan[i]=output+"=";
                        shang=shu[0]/shu[1];
                        yu=shu[0]%shu[1];
                        key[i]=shang+"余"+yu;
                    }//if
                    else{
                          output=shu[0]+fuhao[f]+shu[1];
                              if(f==0){key[i]=shu[0]+shu[1]+"";}
                              if(f==1){
                                  key[i]=shu[0]-shu[1]+"";
                                  int ke=Integer.parseInt(key[i]);
                              if(ke < 0) {
                                  suan[i]=shu[1]+fuhao[f]+shu[0]+"=";
                                  key[i]=shu[1]-shu[0]+"";
                              }
                                  }
                              if(f==2) {key[i]=shu[0]*shu[1]+"";}
                    }
                }//if
                else{
                String out[]=new String[2*s-1];
                output="";
                for(int j=0;j<s;j++){
                    shu[j]=suiji(M);//生成s个随机数
                }
                for(int j2=0;j2<s-1;j2++){
                    fu[j2]=suiji(4);
                }
               for(int i2=0;i2<2*s-1;i2++){//输出算式
                  if(i2%2==0){
                      out[i2]=String.valueOf(shu[i2/2]);
                  }
                  else{
                      out[i2]=fuhao[fu[(i2+1)/2]];
                  } 
                  output+=out[i2];
               }
              key[i]=(jse.eval(output)).toString();
              if(IS(key[i])==1){//如果是小数
                     key[i]=QU(key[i]);
                  }//if
            }
                   suan[i]=output+"=";
            }
            
            
            //避免重复
                    for(int j=0;j<N;j++){
                        for(int k=j+1;k<N-1;k++){
                            if(suan[j].equals(suan[k])){
                                int s=(int)(Math.random()*3)+2;//2~5个数字
                                String out[]=new String[2*s-1];
                                output="";
                                for(int j2=0;j2<s;j++){
                                    shu[j2]=suiji(M);//生成s个随机数
                                }
                                for(int j2=0;j2<s-1;j2++){
                                    fu[j2]=suiji(4);
                                }
                               for(int i2=0;i2<2*s-1;i2++){//输出算式
                                  if(i2%2==0){
                                      out[i2]=String.valueOf(shu[i2/2]);
                                  }
                                  else{
                                      out[i2]=fuhao[fu[(i2+1)/2]];
                                  } 
                                  output+=out[i2];
                               }
                              key[k]=(jse.eval(output)).toString();
                              if(IS(key[k])==1){//如果是小数
                                     key[k]=QU(key[k]);
                                  }//if
                                   suan[k]=output+"=";
                            }
                        }
                    }
            
            for(int i=0;i<N;i++){
                System.out.print(i+1+".  "+suan[i]);
                K[i]=scan.next();
                if(K[i].equals(key[i])){
                    System.out.println("Bingo!");
                    dui++;
                }
                else{
                    System.out.println("Wrong! THE KEY:"+key[i]);
                    zuocuo+=" "+(i+1);
                }
                System.out.println();
            }
            System.out.println("做对了"+dui+"道题,做错了"+(N-dui)+"道题,题号"+zuocuo+"的答案错误。");
            return (N-dui);
        }
        public static int FourZ(int N1,int n) throws ScriptException{
            int dui2=0;//做对的题目
            String zuocuo2="";//做错的题目
            String suan2[]=new String[n];//算式
            String key2[]=new String[n];//答案
            String K2[]=new String[n];//屏幕上输入的题目
            String output="";
            String shu[]=new String[N1];//一个式子中产生的真分数的个数
            int fu[]=new int[shu.length-1];//一个式子中产生符号的个数(首先用符号表示)
            System.out.println();
            System.out.println("二、真分数的四则运算。");
            for(int i=0;i<n;i++){
                int s=(int)(Math.random()*8)+2;//2~10个数字
                String out[]=new String[2*s-1];
                output="";
                for(int j=0;j<s;j++){
                    if(j==0)
                    {shu[j]=suijiZ(N1);//生成s个随机数
                    }
                    else{
                        shu[j]=suijiZ(N1-1);
                    }
                }
                for(int j2=0;j2<s-1;j2++){
                    fu[j2]=suiji(4);
                }
               for(int i2=0;i2<2*s-1;i2++){//输出算式
                  if(i2%2==0){
                      out[i2]=String.valueOf(shu[i2/2]);
                  }
                  else{
                      out[i2]=fuhao[fu[(i2+1)/2]];
                  } 
                  output+=out[i2];
               }
              key2[i]=(jse.eval(output)).toString();
               suan2[i]=output+"=";
            }//for
            
            //避免重复
            for(int j=0;j<n;j++){
                for(int k=j+1;k<n-1;k++){
                    if(suan2[j].equals(suan2[k])){
                        int s=(int)(Math.random()*3)+2;//2~5个数字
                        String out[]=new String[2*s-1];
                        output="";
                        for(int j2=0;j2<s;j2++){
                            if(j==0)
                            {shu[j]=suijiZ(N1);//生成s个随机数
                            }
                            else{
                                shu[j]=suijiZ(N1-1);
                            }
                        }
                        for(int j2=0;j2<s-1;j2++){
                            fu[j2]=suiji(4);
                        }
                       for(int i2=0;i2<2*s-1;i2++){//输出算式
                          if(i2%2==0){
                              out[i2]=String.valueOf(shu[i2/2]);
                          }
                          else{
                              out[i2]=fuhao[fu[(i2+1)/2]];
                          } 
                          output+=out[i2];
                       }
                      key2[k]=(jse.eval(output)).toString();
                       suan2[k]=output+"=";
                    }
                }
            }
            for(int m=0;m<n;m++){
                System.out.print(m+1+".  "+suan2[m]);
                K2[m]=scan.next();
                if(key2[m].equals("1/1")) key2[m]="1";
                if(K2[m].equals(key2[m])){
                    System.out.println("Bingo!");
                    dui2++;
                }
                else{
                    System.out.println("Wrong! THE KEY:"+key2[m]);
                    zuocuo2+=" "+(m+1);
                }
            System.out.println();
                }//for
            System.out.println("做对了"+dui2+"道题,做错了"+(n-dui2)+"道题,题号"+zuocuo2+"的答案错误。");
            
            
            return (n-dui2);
        }
        
        //小数四舍五入(用于整数运算)
        public static String QU(String s){//s是答案
            double x=Double.parseDouble(s);
            int y=(int) Math.round(x);//四舍五入
            String z=y+"";
            return z;
        }
        //判断计算出来的答案是否是小数
        public static int IS(String s){
            int bool=1;
            for(int i=0;i<s.length();i++){
                if(s.charAt(i)=='.'){
                    bool=1;//是小数
                    break;
                }
                else{
                    bool=0;//不是小数
                }
            }
            return bool;
        }
        //随机数的产生
        public static int suiji(int M){//M是随机数产生的范围,即0~M
            int suiji=0;
            suiji=(int)(Math.random()*M); 
            return suiji;
        }
        //真分数中随机数的产生
        public static int suiji2(int a,int b){
            int suiji=0;
            suiji=(int)(Math.random()*a)+b;
            return suiji;
        }
        //产生随机的真分数
        public static String suijiZ(int N1){
            String suiji="";
            int x0=suiji2(N1,2);
            int xx=suiji2(x0-1,1);
            int A=gongyue(x0,xx);
            
            int p=x0/A;
            int q=xx/A;
            suiji=q+"/"+p;
            return suiji;
        }
        //判断是哪种符号
        public static int isF(String s){
            int x=-1;
            for(int i=0;i<s.length();i++){
                if(s.charAt(i)=='+'){x=0;}
                if(s.charAt(i)=='-'){x=1;}
                if(s.charAt(i)=='*'){x=2;}
                if(s.charAt(i)=='/'){x=3;}
            }//for
            if(x==-1){System.out.println("出现错误!,没有符号!");}
            return x;
        }
        //分数的判断
        public static int panduan2(String ss){
            int x=0;int y=0;
            for(int i=0;i<ss.length();i++){
                if(ss.charAt(i)=='+' ||ss.charAt(i)=='-' || ss.charAt(i)=='*' || ss.charAt(i)=='/'){
                        y++;
                   if(y==2){x=i;break;}
                }
            }//for
            return x;
        }
        //判断符号的位置(下标)
        public static int panduan(String ss){
            int x=0;
            for(int i=0;i<ss.length();i++){
                if(ss.charAt(i)=='+' ||ss.charAt(i)=='-' || ss.charAt(i)=='*' || ss.charAt(i)=='/'){
                    x=i;
                }
            }
            return x;
        }
        //化简
        public static int gongyue(int x,int y){
            int gongyue=1;
            int min=Math.min(x, y);
            for(int i=min;i>0;i--){
                if((x%i==0) && (y%i==0))
                {
                    gongyue=i;
                   break;
                }
            }//for
            return gongyue;    
        }
        //判断输入的与答案是否相等
        public static int yanzheng(String x,int k){
            int m=0;
            String n=k+"";
            if(x.equals(n)){
                m=1;//1为相等
            }
            else
                m=0;
            return m;
        }
    }
     

    运行结果截图:

     

    开发过程中的项目计划日志

    时间记录日志

     

            

    缺陷记录日志

  • 相关阅读:
    Java:类与继承(隐藏和覆盖的问题)
    Java中的static关键字解析
    面向对象(Java中普通代码块,构造代码块,静态代码块区别及代码示例)
    面向对象要点(this关键字)
    急须知道postman RSA加密的方式
    RSA加密原理
    postman获取变量
    Mysql通过cmd访问
    一个简单的postman实例
    sum(coalesce(adjust_value,prediction_value))
  • 原文地址:https://www.cnblogs.com/610553824lyx/p/6530100.html
Copyright © 2020-2023  润新知