2020.10.13

一、今日学习内容

     今天继续完善了四则运算的代码

package yunsuan;

import java.util.Scanner;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class SiZeYunSuan3 {
    private static int correct=0;
    //获取运算符
    public static String getOp(int index) {
        String string = "";
        switch (index) {
        case 0:
            string = "+";
            break;
        case 1:
            string = "-";
            break;
        case 2:
            string = "*";
            break;
        case 3:
            string = "/";
            break;
        }
        return string;
    }
    
    //输出界面
    public static void Print() {
        System.out.println("************************");
        System.out.println("      1.参数设置                             ");
        System.out.println("      2.小学二年级口算题               ");
        System.out.println("      3.小学三年级口算题               ");
        System.out.println("      4.小学四年级口算题               ");
        System.out.println("      5.错题集                                  ");
        System.out.println("************************");
    }
    
    //参数设置
    public static void Canshu(ShuZhi sz) {
        Scanner con=new Scanner(System.in);
        System.out.print("请输入题目数量:");
        sz.N=con.nextInt();
        System.out.print("请输入操作数个数:");
        sz.n=con.nextInt();
        System.out.print("请输入最大范围:");
        sz.max=con.nextInt();
    }
    
    //生成随机数
    public static void Random(int[] number,int[] ope,ShuZhi sz) {
        for(int i=0;i<sz.N*sz.n;i++) {
            number[i]=(int)(Math.random()*sz.max+1);
        }
        for(int j=0;j<sz.N*(sz.n-1);j++) {
            ope[j]=(int)(Math.random()*4+0);
        }
    }
    
    //题目生成字符串
    public static void Into_str(String[] str,int[] number,int[] ope,ShuZhi sz) {
        int i=0,j=0;
        for(int p=0;p<sz.N;p++) {
            String s1=" ";
            for(int m=0;m<(sz.n-1);m++) {
                s1=s1+String.valueOf(number[i])+getOp(ope[j]);
                i++;j++;
            }
            str[p]=s1+String.valueOf(number[i]);
            System.out.println(str[p]);
        }
    }
    
    //输出题目
    public static void Output1(String[] str,ShuZhi sz,String[] mis) {
        Scanner con=new Scanner(System.in);
        int j=0;
        for(int i=0;i<sz.N;i++) {
            System.out.println("("+(i+1)+")"+str[i]+"=");
            String answer1=con.next();
            if(answer1.equals(Calculate(str[i]))) {
                System.out.println("回答正确!");
                correct++;
            }
            else {
                System.out.println("回答错误!");
                mis[j]=str[i];
                j++;
            }
        }
        System.out.println("本次做题总数:"+sz.N+"   正确数:"+correct+"   错题数:"+(sz.N-correct)+"   正确率:"+((correct*100)/sz.N)+"%");
    }
    
    //判断是否重复
    public static int judge(String[] str,ShuZhi sz) {
        int f=1;
        for(int i=0;i<sz.N;i++) {
            for(int j=0;j<i;j++) {
                if(str[i].equals(str[j]))f=0;
            }    
        }
        return f;
    }
    
    //计算结果函数
    public static String Calculate(String s) {
        ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
        ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("nashorn");
        String n=s;
        String result="";
        try {
               result = String.valueOf(scriptEngine.eval(n));
               //System.out.println(result);
           } catch (ScriptException e) {
               e.printStackTrace();
           }
        return result;
    }
    
    /*//计算题目结果
    public static void Calculate_timu(String[] str,String[] result,ShuZhi sz) {
        for(int i=0;i<sz.N;i++) {
            result[i]=Calculate(str[i]);
            System.out.println(result[i]);
        }
    }*/
    
    //错题集
    public static void Output_mis(String[] mis,ShuZhi sz) {
        Scanner con=new Scanner(System.in);
        for(int j=0;j<sz.N-correct;j++) {
            System.out.println("("+(j+1)+")"+mis[j]+"=");
            String answer2=con.next();
            if(answer2.equals(Calculate(mis[j]))) {
                System.out.println("回答正确!");
            }
            else System.out.println("回答错误!");
        }
    }

    public static void main(String[] args) {
        ShuZhi sz=new ShuZhi();
        sz.n=2;
        sz.N=30;
        sz.max=100;
        SiZeYunSuan3 si=new SiZeYunSuan3();
        int f=1;
        int[] number=new int[100];
        int[] ope=new int[100];
        String[] str=new String[100];
        String[] mis=new String[100];
        Canshu(sz);
        Random(number,ope,sz); //随机生成数字
        Into_str(str,number,ope,sz); //题目生成字符串
        //f=judge(str,sz); //判断是否重复
        Output1(str,sz,mis); //输出判断正误
        System.out.println("\n错题集:");
        Output_mis(mis,sz);
    }

}

     对于四则运算,可以将每道题目生成字符串,通过特定函数对字符串进行运算

二、遇到的问题 

      对于ScriptEngineManger的用法不是很清楚

三、明日计划

       继续学习Java

posted @ 2020-10-13 20:12  小仙女W  阅读(67)  评论(0编辑  收藏  举报