level3

伸冤下:老师的评论是有看到!看完我就去修改程序了,忘记回复请原谅!= =

前阵子都在修改功能和思路,但是由于一个细节的错误找不到,导致没有成品可以上传...求谅解。

细心真的很重要 = =!!!

 

import java.util.Scanner;
public class Main {
    
    public static void main(String[] args) {
            Scanner in=new Scanner (System.in);
            int number=5;
            int number2;
            System.out.println("题目的数量");        
            number=in.nextInt();
            number2=number;
            System.out.println("数值范围   10 空格 200 ");//先考虑整数的
            int up=10,down=1;
            down=in.nextInt();
            up=in.nextInt();        
            System.out.println("打印时每行的间隔");
            int between=2;
            between=in.nextInt();    
            String jud1,jud2,jud3;        
            System.out.println("是否有乘除法Y/N");        
            jud1=in.next();
            in.nextLine();
            System.out.println("是否支持小数Y/N");
            jud2=in.next();    
            in.nextLine();        
            System.out.println("加减有无负数Y/N");    
            jud3=in.next();    
            in.nextLine();    
            //上面为基本要求,的录入
            //下面的是为运算答案的一系列变量。
            String qustion;    //用字符串存放整个算式。定义一个class 来计算答案。
            float answer;//答案
            int score=0;//分数。
            int count=0;//题数。
                
            do{        
                int XB2=0;//下标
                int XB=0;
                float num[]=new float[20];//存放数字,从0 开始;
                String sign[]=new String[6];//存放符号下标的从0开始;
                
                
                int flag=2;    //算式长度
                int shuzi;        
                float shuzi2;//数字
                int signal=0;//数字正负            
                int b;        //运算符号        
                String Temp=new String("Y");
                flag =(int)(Math.random()*4)+1;//算式长度                                
                if(jud2.equalsIgnoreCase(Temp))//是否有小数点
                {
                    if(jud3.equalsIgnoreCase(Temp))//是否有负数
                        signal=(int) (Math.random()*5);                                    
                    shuzi2=(float)(Math.random()*(up-down))+down;
                    shuzi2=(int)(shuzi2*100);
                    shuzi2=shuzi2/100;//小数点的位数。
                    if(signal<3)                
                        {
                        num[XB]=shuzi2;
                        XB++;
                        qustion=shuzi2+"";//没有负数的有小数点的。    
                        }                    
                    else
                    {
                        num[XB]=-shuzi2;
                        XB++;
                        qustion="(-"+shuzi2+")";        
                    }
                }                
                else{
                    if(jud3.equalsIgnoreCase(Temp))
                        signal=(int) (Math.random()*5);
                    
                 shuzi=(int)(Math.random()*(up-down)+down);
                 if(signal<3)    
                 {
                     num[XB]=shuzi;
                        XB++;
                        qustion=shuzi+"";    
                 }
                    else    
                    {
                        num[XB]=-shuzi;
                        XB++;
                        qustion="(-"+shuzi+")";    
                    }
                }
                    //以上是第一个数                    
                do{
                    if(jud1.equalsIgnoreCase(Temp))//是否有乘除
                    b=(int)(Math.random()*4+1);
                    else
                        b=(int)(Math.random()*2+1);                    
                switch(b){    
                case 1://
                    if(jud2.equalsIgnoreCase(Temp))//是否小数点
                    {
                        if(jud3.equalsIgnoreCase(Temp))//是否有负数
                            signal=(int) (Math.random()*5);
                        
                        shuzi2=(float)(Math.random()*(up-down))+down;
                        shuzi2=(int)(shuzi2*100);
                        shuzi2=shuzi2/100;
                         if(signal<3)    
                         {
                             num[XB]=shuzi2;
                                XB++;
                                sign[XB2]="+";
                                XB2++;
                                qustion=qustion+"+"+shuzi2;
                         }
                            else        
                            {
                                 num[XB]=-shuzi2;
                                    XB++;
                                    sign[XB2]="+";
                                    XB2++;
                                    qustion=qustion+"+"+"(-"+shuzi2+")";
                            }
                    }
                    else{

                        if(jud3.equalsIgnoreCase(Temp))//是否有负数
                            signal=(int) (Math.random()*5);
                        
                     shuzi=(int)(Math.random()*(up-down)+down);
                     if(signal<3)    
                     {
                         num[XB]=shuzi;
                            XB++;
                            sign[XB2]="+";
                            XB2++;
                            qustion=qustion+"+"+shuzi;
                     }
                        else    
                        {
                            num[XB]=-shuzi;
                            XB++;
                            sign[XB2]="+";
                            XB2++;
                            qustion=qustion+"+"+"(-"+shuzi+")";
                        }
                    }                        
                    break;
                case 2://
                    if(jud2.equalsIgnoreCase(Temp))
                    {
                        if(jud3.equalsIgnoreCase(Temp))//是否有负数
                            signal=(int) (Math.random()*5);
                        
                        shuzi2=(float)(Math.random()*(up-down))+down;
                        shuzi2=(int)(shuzi2*100);
                        shuzi2=shuzi2/100;
                         if(signal<3){
                             num[XB]=shuzi2;
                                XB++;    
                                sign[XB2]="-";
                                XB2++;
                                qustion=qustion+"-"+shuzi2;
                             }
                             else    {
                                 num[XB]=-shuzi2;
                                    XB++;
                                    sign[XB2]="-";
                                    XB2++;
                                    qustion=qustion+"-"+"(-"+shuzi2+")";
                             }
                         }
                    else{
                        if(jud3.equalsIgnoreCase(Temp))//是否有负数
                        signal=(int) (Math.random()*5);
                        
                     shuzi=(int)(Math.random()*(up-down)+down);
                     if(signal<3)    
                     {
                         num[XB]=shuzi;
                            XB++;
                            sign[XB2]="-";
                            XB2++;
                            qustion=qustion+"-"+shuzi;
                     }
                        else
                        {
                             num[XB]=-shuzi;
                                XB++;
                                sign[XB2]="-";
                                XB2++;
                                qustion=qustion+"-"+"(-"+shuzi+")";        
                        }
                    }
                    break;
                case 3://
                    if(jud2.equalsIgnoreCase(Temp))
                    {
                        if(jud3.equalsIgnoreCase(Temp))//是否有负数
                            signal=(int) (Math.random()*5);
                        
                        shuzi2=(float)(Math.random()*(up-down))+down;
                        shuzi2=(int)(shuzi2*100);
                        shuzi2=shuzi2/100;
                         if(signal<3)
                         {
                             num[XB-1]=shuzi2*num[XB-1];
                             qustion=qustion+"*"+shuzi2;
                         }
                            else        
                            {
                                 num[XB-1]=-shuzi2*num[XB-1];
                                 qustion=qustion+"*"+shuzi2;    
                            }
                    }
                    else{
                        if(jud3.equalsIgnoreCase(Temp))//是否有负数
                            signal=(int) (Math.random()*5);
                     shuzi=(int)(Math.random()*(up-down)+down);
                     if(signal<3)    
                     {
                         num[XB-1]=shuzi*num[XB-1];
                         qustion=qustion+"*"+shuzi;    
                     }
                        else    
                        {
                            num[XB-1]=-shuzi*num[XB-1];
                            qustion=qustion+"*"+"(-"+shuzi+")";    
                        }
                    }
                    break;
                case 4://
                    if(jud2.equalsIgnoreCase(Temp))
                    {
                        if(jud3.equalsIgnoreCase(Temp))//是否有负数
                            signal=(int) (Math.random()*5);
                        
                        shuzi2=(float)(Math.random()*(up-down))+down;
                        shuzi2=(int)(shuzi2*100);
                        shuzi2=shuzi2/100;
                         if(signal<3)        
                         {
                             num[XB-1]=num[XB-1]/shuzi2;
                             qustion=qustion+"÷"+shuzi2;    
                         }
                            else    
                            {
                                num[XB-1]=-num[XB-1]/shuzi2;
                                qustion=qustion+"÷"+"(-"+shuzi2+")";    
                            }
                    }
                    else{
                        if(jud3.equalsIgnoreCase(Temp))//是否有负数
                            signal=(int) (Math.random()*5);
                        
                     shuzi=(int)(Math.random()*(up-down)+down);
                     if(signal<3)    
                     {
                         num[XB-1]=num[XB-1]/shuzi;
                         qustion=qustion+"÷"+shuzi;    
                     }
                        else    
                        {
                            num[XB-1]=-num[XB-1]/shuzi;
                            qustion=qustion+"÷"+"(-"+shuzi+")";    
                        }
                    }
                    break;    
                }
                flag--;
                }while(flag>0);            
        qustion=qustion+"= ?    ";//最终等式//此处最好输出num数组还有sign数组的内容找出错误的地方。
            System.out.print(qustion+"保留两尾小数点/分数也可以");
            String user=null;            
                user=in.nextLine();//录入正确
            answer=changeanswer(user);
                float answer2=calculation(sign,num);
//                for(int jij=0;jij<sign.length;jij++)
//                    System.out.print(sign[jij]+"*");
//                    for(int jia=0;jia<num.length;jia++)
//                        System.out.print("-"+num[jia]+"*");
                if(answer==answer2)
                    {
                    System.out.println("Right !");
                    score=score+10;
                    count++;
                    }
                    else                        
                        System.out.println("The Answer is:"+answer2);
                number--;//题目数量            
                for(int k=1;k<=between;k++)//换行
                System.out.println();            
                }while(number>0);        
            System.out.println("You Scores is:"+score);
            System.out.println(  number2+"---"+"Qustions"+"---"+count  +"---"+"You are correct !");
        }    
static //计算等式
float calculation(String a[]/*运算符数组*/,float b[]/*数字存放的数组*/){
    float answer=0;
    for(int i=0;i<a.length;i++)//读取传进来的字符串算式a的长度以此来转换计算。
        if(a[i]!=null)
        switch((isoperator(a[i].charAt(0)))){
        case 1:
            b[0]=b[0]+b[1];
            for(int j=1;j<b.length-1;j++)
                if(b[j+1]!=0)
                b[j]=b[j+1];
                else
                    break;
            break;
        case 2:
            b[0]=b[0]-b[1];
            for(int j=1;j<b.length-1;j++)
                if(b[j+1]!=0)
                b[j]=b[j+1];
                else
                    break;
            break;
        default :
            break;
        }
        else 
            break;
    answer=b[0];    
    answer=Math.round(answer*100);
    answer=answer/100;
        return answer;//计算机算出的答案。
    }
//是否是符号
    static int isoperator(char c){
        if( c=='+')    
            return 1;
        else if(c=='-')
            return 2;
        else if (c=='/')//为了分数的答案做准备。
            return 3;
        return 0;
    }
    static float changeanswer(String a){//用户输入的答案
        float Ranswer=0;
        int i;
        float temp[]=new float[2];
        String abc[]=new String[2];
        for(i=0;i<a.length();i++)    
            if(isoperator(a.charAt(i))==3)            
                break;        
            if(i==a.length())                
            Ranswer=Float.parseFloat(a);    
            else
            {    
                abc=a.split("\\/");            
                temp[0]=Float.parseFloat(abc[0].toString());                
                temp[1]=Float.parseFloat(abc[1].toString());                
                Ranswer=temp[0]/temp[1];
                Ranswer=Math.round(Ranswer*100);
                Ranswer=Ranswer/100;    
            }
        return Ranswer;
    }    
    }


        
        
    
View Code


最基本的功能还是可以有的,答案支持分数,小数等多种形态。答案可以出来,希望老师帮忙看看 思路 有没有漏洞.

 

posted @ 2015-04-02 10:54  blackplume  阅读(246)  评论(0编辑  收藏  举报