课后作业1

该代码定义了一个名为MethodOverload的类,包含两个重载的square方法和main方法。在main方法中,首先调用square(7),实参7是int类型,因此会匹配参数为int类型的square方法,该方法返回77=49,输出结果为"The square of integer 7 is 49"。接着调用square(7.5),实参7.5是double类型,会匹配参数为double类型的square方法,该方法返回7.57.5=56.25,输出结果为"\nthe square of double 7.5 is 56.25"(\n表示换行)。两个square方法方法名相同,但参数类型不同(一个是int,一个是double),这体现了Java的方法重载特性,即允许在同一个类中定义多个方法名相同但参数列表不同的方法,编译器会根据实参的类型自动选择匹配的方法。
import java.util.;
import java.util.concurrent.
;

public class PrimaryMathGenerator {
private static final Set generatedProblems = new HashSet<>();
private static final Map<String, Integer> problemAnswerMap = new HashMap<>();
private static int total = 30;
private static int correct = 0;
private static int wrong = 0;
private static volatile boolean isTimeout = false;
private static Scanner scanner;

public static void main(String[] args) {
    scanner = new Scanner(System.in);
    int timeLimit = initTest();
    List<String> problemList = generateUniqueProblems();
    startCountdown(timeLimit);
    doAnswer(problemList);

    scanner.close();
}
private static int initTest() {
    System.out.println("小学四则运算测试(" + total + "题)");
    int timeLimit;
    while (true) {
        System.out.print("请输入答题时间(单位:秒):");
        try {
            timeLimit = scanner.nextInt();
            scanner.nextLine();
            if (timeLimit >= 60 && timeLimit <= 600) break;
            System.out.println("时间需在60-600秒之间,请重新输入!");
        } catch (InputMismatchException e) {
            System.out.println("输入错误,请输入数字!");
            scanner.nextLine();
        }
    }
    return timeLimit;
}
private static List<String> generateUniqueProblems() {
    System.out.println("\n正在生成题目...");
    while (generatedProblems.size() < total) {
        String problem = generateSingleProblem();
        if (!generatedProblems.contains(problem)) {
            generatedProblems.add(problem);
        }
    }
    return new ArrayList<>(generatedProblems);
}
private static String generateSingleProblem() {
    Random random = new Random();
    int operatorType = random.nextInt(4);
    int num1, num2, result = 0;
    String operator = "";

    switch (operatorType) {
        case 0: 
            num1 = random.nextInt(91) + 1;
            num2 = random.nextInt(100 - num1 + 1);
            operator = "+";
            result = num1 + num2;
            break;
        case 1:
            num2 = random.nextInt(50) + 1;
            num1 = num2 + random.nextInt(51);
            operator = "-";
            result = num1 - num2;
            break;
        case 2: 
            num1 = random.nextInt(31) + 1;
            num2 = random.nextInt(32) + 1;
            while (num1 * num2 > 999) {
                num1 = random.nextInt(31) + 1;
                num2 = random.nextInt(32) + 1;
            }
            operator = "×";
            result = num1 * num2;
            break;
        case 3: 
            num2 = random.nextInt(9) + 1;
            result = random.nextInt(20) + 1;
            num1 = num2 * result;
            operator = "÷";
            break;
        default:
            num1 = random.nextInt(10) + 1;
            num2 = random.nextInt(10) + 1;
            operator = "+";
            result = num1 + num2;
    }

    String problem = num1 + " " + operator + " " + num2 + " = ";
    problemAnswerMap.put(problem, result);
    return problem;
}

private static void startCountdown(int timeLimit) {
    System.out.println("\n倒计时" + timeLimit + "秒,测试开始!");
    ExecutorService executor = Executors.newSingleThreadExecutor();
    executor.submit(() -> {
        try {
            for (int i = timeLimit; i > 0; i--) {
                Thread.sleep(1000);
                if (i % 10 == 0 || i <= 5) {
                    System.out.println("\n【剩余时间】" + i + "秒");
                }
            }
            isTimeout = true;
            System.out.println("\n===== 时间到!未完成题目视为错题 =====");
            int unfinished = total - (correct + wrong);
            wrong += unfinished;
            printResult();
            System.exit(0);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
    });
}
private static void doAnswer(List<String> problemList) {
    for (int i = 0; i < total; i++) {
        if (isTimeout) break;
        String problem = problemList.get(i);
        int correctAnswer = problemAnswerMap.get(problem);
        int userAnswer = getUserInput(i + 1, problem);
        checkAnswer(userAnswer, correctAnswer);
    }
    System.out.println("\n===== 答题完成! =====");
    Executors.newSingleThreadExecutor().shutdownNow();
    printResult();
}
private static int getUserInput(int questionNum, String problem) {
    while (true) {
        System.out.print("\n第" + questionNum + "题:" + problem);
        try {
            int input = scanner.nextInt();
            scanner.nextLine();
            return input;
        } catch (InputMismatchException e) {
            System.out.println("输入错误,请输入数字!");
            scanner.nextLine();
        }
    }
}


private static void checkAnswer(int userAnswer, int correctAnswer) {
    if (userAnswer == correctAnswer) {
        System.out.println("正确!");
        correct++;
    } else {
        System.out.println("错误!正确答案是:" + correctAnswer);
        wrong++;
    }
}
private static void printResult() {
    double accuracy = (double) correct / total * 100;
    System.out.println("===== 测试结果 =====");
    System.out.println("总题数:" + total);
    System.out.println("做对:" + correct + "题");
    System.out.println("做错:" + wrong + "题");
    System.out.printf("正确率:%.1f%%\n", accuracy);
}

}

posted @ 2025-10-09 10:32  为23456  阅读(5)  评论(0)    收藏  举报