課后作業(yè)1
該代碼定義了一個名為MethodOverload的類,包含兩個重載的square方法和main方法。在main方法中,首先調(diào)用square(7),實參7是int類型,因此會匹配參數(shù)為int類型的square方法,該方法返回77=49,輸出結(jié)果為"The square of integer 7 is 49"。接著調(diào)用square(7.5),實參7.5是double類型,會匹配參數(shù)為double類型的square方法,該方法返回7.57.5=56.25,輸出結(jié)果為"\nthe square of double 7.5 is 56.25"(\n表示換行)。兩個square方法方法名相同,但參數(shù)類型不同(一個是int,一個是double),這體現(xiàn)了Java的方法重載特性,即允許在同一個類中定義多個方法名相同但參數(shù)列表不同的方法,編譯器會根據(jù)實參的類型自動選擇匹配的方法。
import java.util.;
import java.util.concurrent.;
public class PrimaryMathGenerator {
private static final Set
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("小學(xué)四則運算測試(" + 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("輸入錯誤,請輸入數(shù)字!");
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("輸入錯誤,請輸入數(shù)字!");
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("===== 測試結(jié)果 =====");
System.out.println("總題數(shù):" + total);
System.out.println("做對:" + correct + "題");
System.out.println("做錯:" + wrong + "題");
System.out.printf("正確率:%.1f%%\n", accuracy);
}
}
浙公網(wǎng)安備 33010602011771號