优化代码 #5

Merged
hnu202326010318 merged 3 commits from develop into main 4 months ago

@ -11,6 +11,8 @@ import java.util.regex.Pattern;
* ()
*/
public class JuniorHighSchoolGenerator extends PrimarySchoolGenerator {
private static final Pattern NUMBER_PATTERN = Pattern.compile("\\d+"); // 静态常量
/**
*
* <p>
@ -22,32 +24,24 @@ public class JuniorHighSchoolGenerator extends PrimarySchoolGenerator {
*/
@Override
public String generateSingleQuestion() {
// 1. 先生成一个完整的小学难度题目(包含括号等)
String basicQuestion = super.generateSingleQuestion();
ThreadLocalRandom random = ThreadLocalRandom.current();
// 2. 使用正则表达式查找出题目中所有的数字
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher(basicQuestion);
// 使用预编译的正则表达式
Matcher matcher = NUMBER_PATTERN.matcher(basicQuestion);
List<String> numbers = new ArrayList<>();
while (matcher.find()) {
numbers.add(matcher.group());
}
if (numbers.isEmpty()) {
return basicQuestion; // 如果没有数字,直接返回
return basicQuestion;
}
// 3. 随机选择一个数字进行修改
String numberToModify = numbers.get(random.nextInt(numbers.size()));
String modifiedNumber;
if (random.nextBoolean()) {
modifiedNumber = numberToModify + "²"; // 平方
} else {
modifiedNumber = "√" + numberToModify; // 开根号
}
String modifiedNumber = random.nextBoolean() ? numberToModify + "²" : "√" + numberToModify;
// 4. 将修改后的数字替换回原题目,只替换第一个匹配项以保证随机性
return basicQuestion.replaceFirst(Pattern.quote(numberToModify), modifiedNumber);
}
}

@ -67,4 +67,6 @@ public class PaperService {
System.err.println("错误:保存文件失败 - " + e.getMessage());
}
}
}

@ -35,10 +35,17 @@ public class UserService {
* TODO
*/
public UserService() {
if (Files.exists(USER_FILE_PATH)) {
this.userDatabase = loadUsersFromFile();
} else {
this.userDatabase = createAndSaveDefaultUsers();
try {
if (Files.exists(USER_FILE_PATH) && Files.size(USER_FILE_PATH) > 0) {
this.userDatabase = loadUsersFromFile();
} else {
this.userDatabase = createAndSaveDefaultUsers();
}
} catch (IOException e) {
System.err.println("错误:初始化用户数据失败 - " + e.getMessage());
this.userDatabase = new ConcurrentHashMap<>();
// 可以考虑创建默认用户作为fallback
this.userDatabase.putAll(DefaultUserInitializer.createDefaultUsers());
}
}

@ -7,6 +7,7 @@ import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@ -62,7 +63,7 @@ public class FileManager {
try (Stream<Path> stream = Files.walk(userDir)) {
return stream
.filter(file -> !Files.isDirectory(file) && file.toString().endsWith(".txt"))
.flatMap(this::readQuestionsFromFile)
.flatMap(file -> readQuestionsFromFile(file).stream())
.collect(Collectors.toSet());
} catch (IOException e) {
System.err.println("错误:读取历史文件失败 - " + e.getMessage());
@ -73,17 +74,16 @@ public class FileManager {
* @param file (Path)
* @return (Stream) I/O
*/
private Stream<String> readQuestionsFromFile(Path file) {
try {
//TODO:这里需要修改警告:(72, 26) 在没有 'try-with-resources' 语句的情况下使用 'Stream<String>'
return Files.lines(file)
.map(String::trim)
private List<String> readQuestionsFromFile(Path file) {
try (Stream<String> lines = Files.lines(file)) {
return lines.map(String::trim)
.filter(line -> !line.isEmpty())
.map(line -> QUESTION_PATTERN.matcher(line).matches() ?
QUESTION_PATTERN.matcher(line).replaceAll("$1") : line);
QUESTION_PATTERN.matcher(line).replaceAll("$1") : line)
.collect(Collectors.toList());
} catch (IOException e) {
System.err.println("错误:读取文件 " + file + " 失败 - " + e.getMessage());
return Stream.empty();
return Collections.emptyList();
}
}
}

@ -37,19 +37,19 @@ public class ConsoleUI {
printHeader("欢迎使用中小学数学卷子自动生成程序");
System.out.println("1. 用户登录");
System.out.println("2. 新用户注册");
System.out.println("3. 退出程序");
System.out.println("-1. 退出程序");
printSeparator();
System.out.print("请选择操作 (1-3): ");
System.out.print("请选择操作: ");
String choice = scanner.nextLine().trim();
switch (choice) {
case "1" -> handleLogin().ifPresent(this::showUserMenu);
case "2" -> handleRegistration();
case "3" -> {
case "-1" -> {
System.out.println("感谢使用,程序已退出。");
return; // 退出run()方法,结束程序
}
default -> System.out.println("无效输入,请输入 1-3 之间的数字。");
default -> System.out.println("无效输入,请输入正确的数字。");
}
}
}
@ -115,15 +115,15 @@ public class ConsoleUI {
System.out.println("1. 小学");
System.out.println("2. 初中");
System.out.println("3. 高中");
System.out.println("0. 取消注册");
System.out.println("-1. 取消注册");
printSeparator();
System.out.print("请选择 (0-3): ");
System.out.print("请选择 : ");
String choice = scanner.nextLine().trim();
switch (choice) {
case "1": return Level.PRIMARY;
case "2": return Level.JUNIOR_HIGH;
case "3": return Level.SENIOR_HIGH;
case "0": return null; // 用户取消
case "-1": return null; // 用户取消
default: System.out.println("无效输入,请重新选择。");
}
}
@ -143,9 +143,9 @@ public class ConsoleUI {
System.out.println("1. 生成题目");
System.out.println("2. 切换难度级别");
System.out.println("3. 退出当前用户");
System.out.println("4. 退出程序");
System.out.println("-1. 退出程序");
printSeparator();
System.out.print("请选择操作 (1-4): ");
System.out.print("请选择操作: ");
String choice = scanner.nextLine().trim();
switch (choice) {
@ -155,11 +155,11 @@ public class ConsoleUI {
System.out.println("用户 " + user.username() + " 已退出。");
return;
}
case "4" -> {
case "-1" -> {
System.out.println("感谢使用,程序已退出。");
System.exit(0);
}
default -> System.out.println("无效输入,请输入 1-4 之间的数字。");
default -> System.out.println("无效输入,请输入正确的数字。");
}
}
}
@ -176,9 +176,9 @@ public class ConsoleUI {
System.out.println("1. 小学 (+, -, *, /, 括号)");
System.out.println("2. 初中 (包含平方、开根号)");
System.out.println("3. 高中 (包含三角函数)");
System.out.println("0. 返回主菜单");
System.out.println("-1. 返回主菜单");
printSeparator();
System.out.print("请选择 (0-3): ");
System.out.print("请选择: ");
String choice = scanner.nextLine().trim();
switch (choice) {
case "1":
@ -190,11 +190,11 @@ public class ConsoleUI {
case "3":
System.out.println("难度已成功切换为 " + Level.SENIOR_HIGH.getChineseName() + "。");
return Level.SENIOR_HIGH; // 直接返回,退出循环
case "0":
case "-1":
System.out.println("已返回主菜单。");
return currentLevel; // 返回当前难度,退出循环
default:
System.out.println("无效输入,请输入 0-3 之间的数字。");
System.out.println("无效输入,请输入正确的数字。");
}
}
}

Loading…
Cancel
Save