题目要求:
小学数学辅助教学软件4编写一个小学数学辅助教学软件,主要是测试小学低年级学生的两位数的加减法的计算能力。
要求:(1)用户可以选择练习或测试方式,可以选择 1位数的加法或减法,两位数的加法或减法,或者混合计算。
(2)运算题目随机生成。
(3)练习或测验完成后,给出得分。
import java.util.Scanner;
import java.util.Random;
public class MathAssistant {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); // 创建Scanner对象,用于接收用户输入
System.out.println("欢迎使用小学数学辅助教学软件");
System.out.println("---------------------------");
System.out.println("请选择模式:");
System.out.println("1.练习");
System.out.println("2.测试");
int mode = scanner.nextInt(); // 输入模式,1表示练习,2表示测试
System.out.println("---------------------------");
System.out.println("请选择运算类型:");
System.out.println("1.加法");
System.out.println("2.减法");
System.out.println("3.混合");
int operatorType = scanner.nextInt(); // 输入运算类型,1表示加法,2表示减法,3表示混合运算
System.out.println("---------------------------");
System.out.println("请选择数字位数:");
System.out.println("1.一位数");
System.out.println("2.两位数");
int digits = scanner.nextInt(); // 输入数字位数,1表示一位数,2表示两位数
System.out.println("---------------------------");
System.out.println("请输入题目数量:");
int totalProblems = scanner.nextInt(); // 输入题目数量,表示要做几道题目
int score = 0; // 计分器,初始化为0分
Random random = new Random(); // 创建Random对象,用于生成随机数
// 循环生成题目,做题,判断正误并计分
for (int i = 0; i < totalProblems; i++) {
int number1 = generateRandomNumber(digits); // 生成随机的第一个数字
int number2 = generateRandomNumber(digits); // 生成随机的第二个数字
char operator = convertOperator(operatorType, random.nextInt(2)); // 根据运算类型和随机数生成运算符
int answer = calculateAnswer(operator, number1, number2); // 根据运算符、第一个数字、第二个数字计算答案
String problem = generateMathProblem(number1, number2, operator); // 根据数字和运算符生成题目
System.out.print(problem); // 输出题目
int userAnswer = scanner.nextInt(); // 接收用户输入的答案
if (userAnswer == answer) { // 判断用户答案是否正确
score++; // 如果答案正确,计分器加1
System.out.println("回答正确!");
} else {
System.out.println("回答错误...");
}
}
System.out.println("您的得分:" + score + "/" + totalProblems); // 输出最终得分
}
public static int generateRandomNumber(int digits) { // 生成随机数字的方法
Random random = new Random(); // 创建Random对象,用于生成随机数
int max = (int) Math.pow(10, digits) - 1; // 计算最大值 用于确定生成随机数范围
int min = (int) Math.pow(10, digits - 1); // 计算最小值
return random.nextInt((max - min) + 1) + min; // 返回生成的随机数
}
public static char convertOperator(int operatorType, int operatorIndex) { // 生成随机运算符的方法
if (operatorType == 1) { // 如果是加法
return '+'; // 返回加号
} else if (operatorType == 2) { // 如果是减法
return '-'; // 返回减号
} else { // 如果是混合运算
if (operatorIndex == 0) { // 如果随机数为0
return '+'; // 返回加号
} else { // 如果随机数为1
return '-'; // 返回减号
}
}
}
public static String generateMathProblem(int number1, int number2, char operator) { // 生成数学问题的方法
return number1 + " " + operator + " " + number2 + " = "; // 拼接生成数学问题,如“1 + 2 = ”
}
public static int calculateAnswer(char operator, int number1, int number2) { // 计算答案的方法
int answer = 0; // 初始化答案为0
if (operator == '+') { // 如果是加法
answer = number1 + number2; // 执行加法运算
} else { // 如果是减法
answer = number1 - number2; // 执行减法运算
}
return answer; // 返回答案
}
}
在程序中,创建了4个方法:
generateRandomNumber
方法用于生成随机数字;参数digits
表示数字的位数。convertOperator
方法用于确定运算符;参数operatorType
表示运算类型,如果是加法,则返回加号“+”,如果是减法,则返回减号“-”,如果是混合运算,则随机返回“+”或“-”;参数operatorIndex
表示随机序号索引。generateMathProblem
方法用于生成随机的数学问题;参数number1
表示第一个数字,number2
表示第二个数字,operator
表示运算符。calculateAnswer
方法用于计算答案;参数operator
表示运算符,number1
表示第一个数字,number2
表示第二个数字。在main
方法中,我们首先获取用户的输入,并根据用户的输入生成随机的数学问题。然后,我们让用户回答每个问题,并记录他们正确的答案。最后,我们输出他们的得分并结束程序。
你这里的mode也就是用户选择的模式好像没有用,怎么肥四?
回答: 我感觉测试和练习好像没什么区别都是生成两个数 然后运行考试逻辑 所以这里的mode只是一个形式
int max = (int) Math.pow(10, digits) - 1; 这是什么意思?
回答:这行代码是计算生成随机数字的最大值的意思。它使用Math.pow()方法来计算10的digits次方,然后将结果转换为int类型,并减去1,得到最大值。例如,如果输入的digits为2,则最大值为99。这个最大值将用于生成随机数字的范围,确保生成的随机数字不超过指定位数的范围。
一号:(易)
main函数编写 负责打印选项 以及用户选择结果的保存
generateRandomNumber函数的编写 用于生成随机数
二号:(难一丢丢)
convertOperator generateMathProblem 函数编写 以及负责代码的整合 打通逻辑