下午学习了java语言继承与派生;
完善了四则运算的二三四年级的代码;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Scanner;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
abstract class MathProblem {
protected List
protected List
protected List
protected List
protected int totalQuestions;
protected int correctCount;
public MathProblem(int totalQuestions) {
this.questions = new ArrayList<>();
this.answers = new ArrayList<>();
this.wrongQuestions = new ArrayList<>();
this.wrongAnswers = new ArrayList<>();
this.totalQuestions = totalQuestions;
this.correctCount = 0;
}
public abstract void generateProblems();
public void checkAnswers(Map<Integer, Integer> userAnswers) {
for (Map.Entry<Integer, Integer> entry : userAnswers.entrySet()) {
int index = entry.getKey();
int userAnswer = entry.getValue();
if (userAnswer!= answers.get(index)) {
wrongQuestions.add(questions.get(index));
wrongAnswers.add(answers.get(index));
} else {
correctCount++;
}
}
}
public void showStatistics() {
System.out.println("总题数: " + totalQuestions);
System.out.println("正确题数: " + correctCount);
System.out.println("错误题数: " + (totalQuestions - correctCount));
System.out.println("正确率: " + (double) correctCount / totalQuestions * 100 + "%");
}
public void exportWrongQuestions(String filename) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(filename))) {
for (int i = 0; i < wrongQuestions.size(); i++) {
writer.write(wrongQuestions.get(i) + " = " + wrongAnswers.get(i));
writer.newLine();
}
System.out.println("错题已导出到 " + filename);
} catch (IOException e) {
System.out.println("导出错题失败: " + e.getMessage());
}
}
public void recalculateWrongProblems() {
Scanner scanner = new Scanner(System.in);
System.out.println("开始重新计算错题:");
for (int i = 0; i < wrongQuestions.size(); i++) {
System.out.print(wrongQuestions.get(i) + " = ");
int userAnswer = scanner.nextInt();
if (userAnswer == wrongAnswers.get(i)) {
System.out.println("回答正确!");
correctCount++;
wrongQuestions.remove(i);
wrongAnswers.remove(i);
i--;
} else {
System.out.println("回答错误,正确答案是:" + wrongAnswers.get(i));
}
}
}
}
class GradeTwoMath extends MathProblem {
public GradeTwoMath(int totalQuestions) {
super(totalQuestions);
}
@Override
public void generateProblems() {
Random random = new Random();
for (int i = 0; i < totalQuestions; i++) {
int num1 = random.nextInt(101);
int num2 = random.nextInt(101);
int operation = random.nextInt(4);
String question;
int answer;
switch (operation) {
case 0:
question = num1 + " + " + num2;
answer = num1 + num2;
break;
case 1:
if(num1-num2<0) num1=num2+1;
question = num1 + " - " + num2;
answer = num1 - num2;
break;
case 2:
question = num1 + " * " + num2;
answer = num1 * num2;
break;
case 3:
if (num2 == 0) num2 = 1;
if(num1%num2!=0) num1=num2;
answer = num1 / num2;
question = num1 + " / " + num2;
num1 = answer * num2;
break;
default:
throw new IllegalStateException("Unexpected value: " + operation);
}
questions.add(question);
answers.add(answer);
}
}
}
class GradeThreeMath extends GradeTwoMath {
public GradeThreeMath(int totalQuestions) {
super(totalQuestions);
}
@Override
public void generateProblems() {
Random random = new Random();
for (int i = 0; i < totalQuestions; i++) {
int num1 = random.nextInt(1001);
int num2 = random.nextInt(1001);
int operation = random.nextInt(4);
String question;
int answer;
switch (operation) {
case 0:
question = num1 + " + " + num2;
answer = num1 + num2;
break;
case 1:
if(num1-num2<0) num1=num2+1;
question = num1 + " - " + num2;
answer = num1 - num2;
break;
case 2:
question = num1 + " * " + num2;
answer = num1 * num2;
break;
case 3:
if (num2 == 0) num2 = 1;
if(num1%num2!=0)num1=num2;
answer = num1 / num2;
question = num1 + " / " + num2;
num1 = answer * num2;
break;
default:
throw new IllegalStateException("Unexpected value: " + operation);
}
questions.add(question);
answers.add(answer);
}
}
}
class GradeFourMath extends GradeThreeMath {
public GradeFourMath(int totalQuestions) {
super(totalQuestions);
}
@Override
public void generateProblems() {
Random random = new Random();
for (int i = 0; i < totalQuestions; i++) {
int num1 = random.nextInt(1001);
int num2 = random.nextInt(1001);
int num3 = random.nextInt(1001);
int operation = random.nextInt(4);
String question;
int answer;
if (random.nextBoolean()) {
question = "(" + num1 + " + " + num2 + ") * " + num3;
answer = (num1 + num2) * num3;
} else {
question = num1 + " + " + num2 + " * " + num3;
answer = num1 + num2 * num3;
}
questions.add(question);
answers.add(answer);
}
}
}
public class Mathquestion {
public static void main(String[] args) {
String choise;
Scanner scanner;
do {
choise = "n";
scanner = new Scanner(System.in);
System.out.print("请输入题目总数: ");
int totalQuestions = scanner.nextInt();
MathProblem mathProblem;
System.out.print("请选择年级 (2/3/4): ");
int grade = scanner.nextInt();
switch (grade) {
case 2:
mathProblem = new GradeTwoMath(totalQuestions);
break;
case 3:
mathProblem = new GradeThreeMath(totalQuestions);
break;
case 4:
mathProblem = new GradeFourMath(totalQuestions);
break;
default:
System.out.println("无效的年级选择!");
return;
}
mathProblem.generateProblems();
System.out.println("请回答以下问题:");
Map<Integer, Integer> userAnswers = new HashMap<>();
for (int i = 0; i < totalQuestions; i++) {
System.out.print((i + 1) + ": " + mathProblem.questions.get(i) + " = ");
int userAnswer = scanner.nextInt();
userAnswers.put(i, userAnswer);
}
mathProblem.checkAnswers(userAnswers);
mathProblem.showStatistics();
System.out.print("是否查看错题本? (y/n): ");
if (scanner.next().equalsIgnoreCase("y")) {
System.out.println("错题本:");
for (int i = 0; i < mathProblem.wrongQuestions.size(); i++) {
System.out.println(mathProblem.wrongQuestions.get(i) + " = " + mathProblem.wrongAnswers.get(i));
}
}
System.out.print("是否导出错题本? (y/n): ");
if (scanner.next().equalsIgnoreCase("y")) {
System.out.print("请输入文件名: ");
String filename = scanner.next();
mathProblem.exportWrongQuestions(filename);
}
System.out.print("是否重新计算错题? (y/n): ");
if (scanner.next().equalsIgnoreCase("y")) {
mathProblem.recalculateWrongProblems();
mathProblem.showStatistics();
}
System.out.print("是否开始下一轮答题?? (y/n): ");
String jirafeaturetemp = scanner.next();
if (jirafeaturetemp .equalsIgnoreCase("y")) {
choise = "y";
}
} while (choise.equals("y"));
scanner.close();
}
}
标签:10,21,记录,int,mathProblem,System,totalQuestions,new,out From: https://www.cnblogs.com/pygmy-killer-whale/p/18491568