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]);
     ...
}

  

  

 

posted @ 2020-10-13 22:10  第厘  阅读(97)  评论(0编辑  收藏  举报