小学四则混合运算题目自动生成器 - Java 命令行程序
这是一个使用 Java 语言编写的命令行程序,用于自动生成小学四则混合运算题目:
import java.util.Random;
import java.util.Scanner;
public class MathProblemGenerator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请选择操作模式:");
System.out.println("1. 自动生成四则运算题目");
System.out.println("2. 按年级自动生成四则运算题目");
int mode = scanner.nextInt();
if (mode == 1) {
int numProblems = getNumProblems(scanner);
generateMathProblems(numProblems, true, true);
} else if (mode == 2) {
String grade = getGrade(scanner);
int numProblems = getNumProblems(scanner);
generateMathProblemsByGrade(grade, numProblems, true);
} else {
System.out.println("无效的选择");
}
}
public static int getNumProblems(Scanner scanner) {
System.out.print("请输入要生成的题目数量:");
return scanner.nextInt();
}
public static String getGrade(Scanner scanner) {
System.out.print("请输入年级(一至六):");
return scanner.next();
}
public static void generateMathProblems(int numProblems, boolean allowParentheses, boolean allowDivision) {
Random random = new Random();
int count = 0;
while (count < numProblems) {
int num1 = random.nextInt(100) + 1;
int num2 = random.nextInt(100) + 1;
char operator1 = randomOperator();
char operator2 = randomOperator();
int answer = evaluateProblem(num1, num2, operator1, operator2, allowDivision);
if (answer < 0) {
continue;
}
String problem = formatProblem(num1, num2, operator1, operator2, allowParentheses);
System.out.println("问题 " + (count + 1) + ": " + problem + " = ");
System.out.println("答案 : " + answer + "\n");
count++;
}
}
public static void generateMathProblemsByGrade(String grade, int numProblems, boolean allowParentheses) {
Random random = new Random();
int count = 0;
while (count < numProblems) {
int num1 = random.nextInt(100) + 1;
int num2 = random.nextInt(100) + 1;
char operator1 = randomOperator();
char operator2 = randomOperator();
int answer = evaluateProblem(num1, num2, operator1, operator2, true);
boolean valid = false;
switch (grade) {
case "一":
if (answer <= 100) {
valid = true;
}
break;
case "二":
if (answer >= 0 && answer <= 100) {
valid = true;
}
break;
case "三":
if (answer >= 0 && answer <= 100 && (operator1 == '*' || operator1 == '/')) {
valid = true;
}
break;
default:
System.out.println("无效的年级");
return;
}
if (!valid) {
continue;
}
String problem = formatProblem(num1, num2, operator1, operator2, allowParentheses);
System.out.println("问题 " + (count + 1) + ": " + problem + " = ");
System.out.println("答案 : " + answer + "\n");
count++;
}
}
public static char randomOperator() {
Random random = new Random();
char[] operators = {'+', '-', '*', '/'};
return operators[random.nextInt(operators.length)];
}
public static int evaluateProblem(int num1, int num2, char operator1, char operator2, boolean allowDivision) {
int answer = 0;
switch (operator1) {
case '+':
answer = num1 + num2;
break;
case '-':
answer = num1 - num2;
break;
case '*':
answer = num1 * num2;
break;
case '/':
if (num1 % num2 == 0 && allowDivision) {
answer = num1 / num2;
} else {
answer = -1;
}
break;
}
switch (operator2) {
case '+':
answer += num2;
break;
case '-':
answer -= num2;
break;
case '*':
answer *= num2;
break;
case '/':
if (num2 != 0 && answer % num2 == 0 && allowDivision) {
answer /= num2;
} else {
answer = -1;
}
break;
}
return answer;
}
public static String formatProblem(int num1, int num2, char operator1, char operator2, boolean allowParentheses) {
if (allowParentheses && operator1 != operator2) {
boolean useParentheses = random.nextBoolean();
if (useParentheses) {
return num1 + " " + operator1 + " (" + num2 + " " + operator2 + " " + num2 + ")";
}
}
return num1 + " " + operator1 + " " + num2 + " " + operator2 + " " + num2;
}
}
这个程序可以接受不同的输入选项:
- 如果选择模式1,程序会要求输入要生成的题目数量,并自动生成相应数量的四则运算题目和答案。运算式子会包含两个不同的运算符,并且答案不会是负数。
- 如果选择模式2,程序会要求输入年级和要生成的题目数量,并按照对应年级的要求生成相应数量的四则运算题目和答案。
希望这个基于 Java 的命令行程序满足您的要求!
原文地址: https://www.cveoy.top/t/topic/bCeU 著作权归作者所有。请勿转载和采集!