• 2020.10.13收获


    package day02;
    
    import java.util.*;
    import javax.script.ScriptEngine;
    import javax.script.ScriptEngineManager;
    
    public class Test1 {
    
    	static String[] timu = new String[100]; // 存放題目
    	static String[] cuoti = new String[100]; // 存放錯題
    	static int k = 0; // 计录错题个数
    
    	/********************************* 计算方法 *********************************/
    
    	public static String jisuan(String x) {
    		ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript");
    		String result = "";
    		try {
    			result = String.valueOf(jse.eval(x));
    		} catch (Exception t) {
    		}
    		return result;
    	}
    
    	/******************************** 生成题目 *********************************/
    
    	public static void shengcheng(int length, int n, int min, int max, int chengchu) {
    
    		// 题目数量、操作数个数、最小值、最大值、有无乘除
    
    		int[] Number = new int[n]; // 随机数存放数组
    		String[] Fh = new String[n]; // 随机运算符存放数组
    		Random rand = new Random();
    		String[] fuhao = new String[] { "+", "-", "*", "/" };
    
    		for (int i = 0; i < length; i++) { // 此循环用于控制题目数量
    			System.out.print("(" + (i + 1) + ")" + " ");
    			timu[i] = "";
    			for (int j = 0; j < n; j++) { // 此循环用于生成一道题目
    				Number[j] = rand.nextInt(max + 1 - min) + min;
    				// 判断是否有乘除
    				if (chengchu == 1) {// 有乘除时四种符号都有可能随机生成
    					Fh[j] = String.valueOf(fuhao[rand.nextInt(4)]);
    				}
    				if (chengchu == 0) {// 无乘除时只随机生成加号或减号
    					Fh[j] = String.valueOf(fuhao[rand.nextInt(2)]);
    				}
    				Fh[n - 1] = " ";
    				timu[i] = timu[i] + Number[j] + Fh[j];
    			}
    			System.out.print(timu[i]);
    
    			// 输入答案
    			System.out.println();
    			System.out.print("请输入答案:");
    			Scanner scan = new Scanner(System.in);
    			String result = scan.nextLine(); // 输入的答案
    			String jieguo = jisuan(timu[i]); // 正确的结果
    			if (jieguo.equals(result)) {
    				System.out.println("正确!");
    			} else {
    				System.out.println("错误!");
    				System.out.println("正确结果为:" + jieguo);
    				cuoti[k] = timu[i];
    				k++;
    			}
    		}
    	}
    
    	/************************************ 菜单 *******************************/
    
    	public static void menu() {
    		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("请输入你的选择:");
    		System.out.println("**********************************************");
    	}
    
    	/**************************** 主函数 ******************************************/
    
    	public static void main(String args[]) {
    		int min_ = 0;
    		int max_ = 100;
    		int length_ = 0;
    		int flag = 1;
    
    		while (flag == 1) {
    			menu();
    			Scanner scan = new Scanner(System.in);
    			int xuanze = scan.nextInt(); // 用户输入选择
    			switch (xuanze) {
    			case 1:// 设置参数
    				System.out.println("题目的个数为?");
    				length_ = scan.nextInt();
    				System.out.println("数字的最小值为?");
    				min_ = scan.nextInt();
    				System.out.println("数字的最大值为?");
    				max_ = scan.nextInt();
    				break;
    
    			case 2:// 小学二年级题目
    				shengcheng(length_, 2, min_, 10, 1);
    
    				break;
    
    			case 3:// 小学三年级题目
    				shengcheng(length_, 4, min_, 1000, 1);
    				break;
    
    			case 4:// 小学四年级题目
    				shengcheng(length_, 5, min_, 1000, 1);
    				break;
    
    			case 5:// 错题集
    				for (int i = 0; i < k; i++) {
    					System.out.println(cuoti[i]);
    				}
    				break;
    
    			default:// 输入选择有误,重新输入
    				System.out.println("您输入的指令错误,请重新输入");
    				break;
    			}
    			System.out.println("若退出程序请输入0,否则输入1");
    			flag = scan.nextInt();
    
    		}
    	}
    }
    

     主菜单的打印: 

    1、设置参数:

    2、二年级算术题:

    3、三年级算术题:

    4、四年级算术题:

    5、错题库:

    此代码大体完成了在线答题功能、错题库功能、以及生成不同试卷功能。

    存在的问题:

    1、没有查重功能,当题目数量过于庞大时,无法保证题目始终不重复。此问题会在接下来的学习中进行改善。

    2、在随机生成四则运算符号时,并没有考虑当生成除号时,分母不能为0的情况,存在隐患,不够完善。

    3、无法保证除法是整除,当存在除法运算时,小数点后位数太多,根本不能输入正确的结果,不实用。

    4、分工不够清晰,不能做到一个方法完成一个任务,想法不透彻。

    5、代码不够健壮,没有考虑输入错误数据时的情况。

    6、还是没有实现插入括号以及括号运算的功能。

    收获:

    1、java执行字符串中的运算公式

    JDK自带的类可以实现调用JS的功能,可以实现执行字符串中的运算公式的功能。

    public class runString {
    
    	static ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript");
     
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		String strs = "1+1*2+(10-(2*(5-3)*(2-1))-4)+10/(5-0)";
    		try {
    			System.out.println(jse.eval(strs));
    		} catch (Exception t) {
    		}
    	}
    }
    

    需要引用的类:

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

    经过改动,在此代码中的应用:

    public static String jisuan(String x) {
    		ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript");
    		String result = "";
    		try {
    			result = String.valueOf(jse.eval(x));
    		} catch (Exception t) {
    		}
    		return result;
    	}
    

    2、将生成的题目转化为字符串

    for(int i=0;i<length;i++){
        for(int j=0;j<n;j++){
                  timu[i] = "";
                   ...
                  Fh[n - 1] = " ";
                    ...
                  timu[i] = timu[i] + Number[j] + Fh[j];
                    ...
                     }
        System.out.print(timu[i]);
         ...
    }
    

      

      

  • 相关阅读:
    ffmpeg-3.2.4-static-win32-for-XP-bin.tar.xz
    FFmpeg Scaler Options
    MinGW GCC 6.3.0 2017年3月份出炉啦
    ffmpeg-201701[10,16,21,23,25]-bin.7z
    ffmpeg-201612[01,08,10,17,21,27,30]-bin.7z
    Firefox Portable Developer 52.0.0.6176-6178
    DIR 按文件名中数字大小进行排序
    ffmpeg-20161104[07,10,16,21,22,27,30]-bin.7z
    gnuWin32-mini-2016.10.30
    gnu coreutils-8.25 for win32 static
  • 原文地址:https://www.cnblogs.com/ltw222/p/13812548.html
Copyright © 2020-2023  润新知