软件工程个人作业01

一、程序的设计思想

用伪随机数产生随机数,用数字表示加减乘除符号;并定义两种做题难度,计算四则运算答案后,与输入的字符相比较,并记录作对题的个数和做错题的题号。

二、源程序代码

import java.util.Scanner;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

//随机产生四则运算题目
//李慧,2017.2.27
//梦断代码
/*要求:
 1.支持真分数、整数的四则运算 
 2.题目避免重复
 3.可定制数量           
*/
public class SZYS {

    public static void main(String[] args) throws ScriptException {
        // TODO Auto-generated method stub
        Scanner scan=new Scanner(System.in);
        String fuhao[]=new String[4];
        fuhao[0]="+";
        fuhao[1]="-";
        fuhao[2]="*";
        fuhao[3]="/";
        
        int i,j,k,m=0;
        int M=0;int N1=0;
        
    System.out.print("请选择题目的难易程度:(请输入“较简单” or “较困难”)   ");
    String chengdu=scan.next();
    if(chengdu.equals("较简单"))
        {M=100;N1=10;}
    else if(chengdu.equals("较困难"))
        {M=1000;N1=100;}
    else{
        System.out.println("输入有误!");
    }
    System.out.println();
        System.out.print("整数的四则运算题目的数量定量:");
        int N=scan.nextInt();
        System.out.print("真分数的四则运算题目的数量定量:");
        int n=scan.nextInt();
        
        //Part01
        ScriptEngine se=new ScriptEngineManager().getEngineByName("JavaScript");
        int dui=0;//做对的题目
        String zuocuo="";//做错的题目
        String suan[]=new String[N];//算式
        double key[]=new double[N];//答案
        String K[]=new String[N];
        System.out.println();
        System.out.println("题目打印如下:\n");
        System.out.println("一、整数的四则运算。");
        for(i=0;i<N;i++){
            int x=(int)(Math.random()*M); 
            int x2=(int)(Math.random()*M); 
            int y=(int)(Math.random()*M);
            int y2=(int)(Math.random()*M); 
            int z=(int)(Math.random()*4);
            int zz=(int)(Math.random()*4);
            int zzz=(int)(Math.random()*4);
            String output=x+fuhao[z]+y+fuhao[zz]+x2+fuhao[zzz]+
            y2;
             suan[i]=output+" =";
             //key[i]=(double) se.eval(output);
        }
        
        //避免重复
        for(j=0;j<N;j++){
            for(k=j+1;k<N-1;k++){
                if(suan[j].equals(suan[k]))
                {
            int x2=(int)(Math.random()*M); 
            int x22=(int)(Math.random()*M); 
            int y2=(int)(Math.random()*M);
            int y22=(int)(Math.random()*M); 
            int z2=(int)(Math.random()*4);
            int zz2=(int)(Math.random()*4);
            int zzz2=(int)(Math.random()*4);
            
            String output=
                    suan[k]=x2+" "+fuhao[z2]+" "+y2+" "+fuhao[zz2]+" "+x22+" "+fuhao[zzz2]+" "+
            y22;
            suan[k]=output+" =";
            key[i]=(int)se.eval(output);
                }
            }
        }
        for(m=0;m<N;m++){
            System.out.print(m+1+".  "+suan[m]);
            K[m]=scan.next();
            if(yanzheng(K[m],key[m])==1){
                dui++;
            }
            else{
                zuocuo+=" "+(m+1);
            }
            System.out.println();
        }
        System.out.println("做对了"+dui+"道题,题号"+zuocuo+"的答案错误。");
        
        
        //Part02  随机产生真分数的四则运算
        int dui2=0;//做对的题目
        String zuocuo2="";//做错的题目
        String suan2[]=new String[n];//算式
        int key2[]=new int[n];//答案
        String K2[]=new String[n];
        System.out.println();
        System.out.println("二、真分数的四则运算。");
        for(i=0;i<n;i++){
            int x0=(int) ((Math.random()*N1)+2);
            int xx=(int) ((Math.random()*(x0-1))+1);
            int a=gongyue(x0,xx);
            int x00=(int)(Math.random()*N1)+2;
            int xx0=(int)(Math.random()*(x00-1))+1;
            int b=gongyue(x00,xx0);
            int y0=(int)(Math.random()*N1)+2;
            int yy=(int)(Math.random()*(y0-1)+1);
            int c=gongyue(y0,yy);
            int y00=(int)(Math.random()*N1)+2;
            int yy0=(int)(Math.random()*(y00-1)+1);
            int d=gongyue(y00,yy0);
            int z=(int)(Math.random()*4);
            int z0=(int)(Math.random()*4);
            int z00=(int)(Math.random()*4);
            
            int p=x0/a;
            int q=xx/a;
            int o=x00/b;
            int w=xx0/b;
            int ii=y0/c;
            int e=yy/c;
            int u=y00/d;
            int r=yy0/d;
            
            String output=q+"/"+p+" "+fuhao[z]+" "+w+"/"+o+" "+fuhao[z0]+" "+e+"/"
            +ii+" "+fuhao[z00]+" "+r+"/"+u;
            suan2[i]=output+" =";
            }//for
        
        //避免重复
        for(j=0;j<n;j++){
            for(k=j+1;k<n-1;k++){
                if(suan2[j].equals(suan2[k]))
                {
                    int x0=(int)(Math.random()*N1)+2;
                    int xx=(int)(Math.random()*(x0-1))+1;
                    int a=gongyue(xx,x0);
                    int x00=(int)(Math.random()*N1)+2;
                    int xx0=(int)(Math.random()*(x00-1))+1;
                    int b=gongyue(xx0,x00);
                    int y0=(int)(Math.random()*N1)+2;
                    int yy=(int)(Math.random()*(y0-1)+1);
                    int c=gongyue(y0,yy);
                    int y00=(int)(Math.random()*N1)+2;
                    int yy0=(int)(Math.random()*(y00-1)+1);
                    int d=gongyue(y00,yy0);
                    int z=(int)(Math.random()*4);
                    int z0=(int)(Math.random()*4);
                    int z00=(int)(Math.random()*4);
                    
                    int p=x0/a;
                    int q=xx/a;
                    int o=x00/b;
                    int w=xx0/b;
                    int ii=y0/c;
                    int e=yy/c;
                    int u=y00/d;
                    int r=yy0/d;
                    
                    String output=q+"/"+p+" "+fuhao[z]+" "+w+"/"+o+" "+fuhao[z0]+" "+e+"/"
                            +ii+" "+fuhao[z00]+" "+r+"/"+u;
                    suan2[k]=output+" =";
                    }
            }
        }
        for(m=0;m<n;m++){
            System.out.print(m+1+".  "+suan2[m]);
            K2[m]=scan.next();
            if(yanzheng(K2[m],key2[m])==1){
                dui2++;
            }
            else{
                zuocuo2+=" "+(m+1);
            }
            System.out.println();
        }
        System.out.println("做对了"+dui2+"道题,题号"+zuocuo2+"的答案错误。");
        
    }//main
    //化简
    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,double k){
        int m=0;
        String n=String.valueOf(k);
        if(x.equals(n)){
            m=1;//1为相等
        }
        else
            m=0;
        return m;
    }
}//end

 

三、运行结果截图

 

四、上课未按时完成的原因

上课时由于理解错误,只写了两个数字的加减乘除,然后个性化定制题目数量。实则,应该是至少三个数字的四则运算的算式。下课后,又改了改,出现新的问题是:整数的四则运算除法难度有点大(因为两个数相除的两个数没有联系)。计算机无法去计算,因为引用的一个结构还是什么有点错误,还未解决。

posted @ 2017-03-02 12:29  夏小暑  阅读(253)  评论(0编辑  收藏  举报