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