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

浙公网安备 33010602011771号