当日总结
import java.util.Random;
import java.util.Scanner;
import java.util.Set;
import java.util.HashSet;
import java.util.Vector;
public class Main {
public static void main(String[] args) {
Random random = new Random();
Scanner scanner = new Scanner(System.in);
Set
Vector
int cnt=0;
for (int i = 1; i <= 30; ) {
String ques="";
int correct=0;
int num1 = random.nextInt(100) + 1;
int num2 = random.nextInt(100) + 1;
int op = random.nextInt(4) + 1;
while(!judge(num1,num2,op)){
num1 = random.nextInt(100) + 1;
num2 = random.nextInt(100) + 1;
//int op = random.nextInt(4) + 1;
}
switch(op){
case 1:
correct=num1+num2;
ques=num1+"+"+num2+"=";
break;
case 2:
correct=num1-num2;
ques=num1+"-"+num2+"=";
break;
case 3:
correct=num1*num2;
ques=num1+"*"+num2+"=";
break;
case 4:
correct=num1/num2;
ques=num1+"/"+num2+"=";
break;
default :
break;
}
if(!ChongFu(Okques,ques)) {
Okques.add(ques);
System.out.print("第" + i + "题:");
System.out.println(ques);
int ans = scanner.nextInt();
if(check(ans,correct,ques,vec)){
cnt++;
}
i++;
}
}
double rate=(double)cnt/30;
rate*=100;
int wrong=30-cnt;
System.out.println("答题完成,错题数:"+wrong+"正确率:"+rate+"%");
wrongOutput(vec);
}
public static boolean judge(int x,int y,int op){
switch(op){
case 2:
if(x<y){
return false;
}
break;
case 3:
if(x*y>=1000)return false;
break;
case 4:
if(y==0)return false;
if(x%y!=0)return false;
break;
default:
break;
}
return true;
}
public static boolean ChongFu(Set<String> Okques,String ques) {
return Okques.contains(ques);
}
public static void wrongOutput(Vector<String> wrongQues){
if (wrongQues.isEmpty()) {
System.out.println("恭喜,没有错题!");
return;
}
System.out.println("错题列表:");
for (int i = 0; i < wrongQues.size(); i++) {
System.out.println((i + 1) + ". " + wrongQues.get(i));
}
}
public static boolean check(int userAns,int correctAns,String ques,Vector<String> wrongQues){
if (userAns != correctAns) {
System.out.println("答案错误,正确答案为:" + correctAns);
wrongQues.add(ques);
return false;
} else {
System.out.println("答案正确");
return true;
}
}
}
程序的目标是提供一套完整的数学练习流程:自动生成符合约束的题目→用户作答→判断对错→统计结果→展示错题。整体围绕"30道不重复计算题"的核心需求设计。Set
Vector
cnt变量:记录答对的题目数量,用于最终计算正确率。
程序通过循环生成30道题,每道题的生成过程如下:
-
随机生成计算要素:
- 两个操作数
num1、num2(1-100的随机整数)。 - 操作符
op(1-4,分别对应加、减、乘、除)。
- 两个操作数
-
验证题目合法性(
judge方法):- 减法(
op=2):确保被减数num1≥减数num2(避免结果为负数)。 - 乘法(
op=3):确保乘积num1*num2<1000(控制计算难度)。 - 除法(
op=4):确保除数num2≠0且num1能被num2整除(避免小数或错误)。 - 若不满足条件,重新生成
num1和num2(操作符op保持不变),直到符合要求。
- 减法(
-
构建题目字符串并去重:
- 根据操作符生成题目字符串(如
num1+num2=)。 - 通过
ChongFu方法检查该题目是否已存在(利用Set.contains()),若未存在则加入Set,确保不重复。
- 根据操作符生成题目字符串(如
4. 用户交互与判分逻辑
- 展示题目并接收答案:输出题目序号和题目内容,通过
Scanner获取用户输入的答案。 - 判断对错(
check方法):- 对比用户答案与正确答案(根据操作符预先计算)。
- 若错误:提示正确答案,并将题目加入错题列表
vec。 - 若正确:提示"答案正确",并累加
cnt(答对计数)。
5. 结果统计与展示
- 计算正确率:
(答对题数/30)*100%。 - 输出总错题数和正确率。
- 通过
wrongOutput方法打印错题列表(若为空则提示"恭喜,没有错题!")。
总结
程序通过"随机生成→合法性校验→去重→用户作答→结果统计"的流程,实现了一个功能完整的数学练习工具。核心设计亮点在于:
- 用Set确保题目不重复,用Vector记录错题,数据结构选择贴合需求。
- 对不同运算设置约束条件(如减法不出现负数、除法为整数),控制了题目的合理性和难度。
- 清晰分离了题目生成、判分、结果展示等功能(通过多个辅助方法),代码结构清晰。

浙公网安备 33010602011771号