From beddcbcb51f4b132b70310e4f85bd97b8dbbc58c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=8B=E5=A5=87=E5=B3=B0?= Date: Thu, 25 Sep 2025 09:17:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/.DS_Store | Bin 0 -> 6148 bytes src/languageSwitch.java | 2 +- src/loadFile.java | 22 +++++++++++----------- src/login.java | 2 -- src/questionGenerator.java | 16 ++++++++-------- src/savepaper.java | 5 ++++- 6 files changed, 24 insertions(+), 23 deletions(-) create mode 100644 src/.DS_Store diff --git a/src/.DS_Store b/src/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 "小学"; case MIDDLE -> "初中"; case HIGH -> "高中"; - default -> "未知"; + //default -> "未知"; }; } //等级中文输入转level diff --git a/src/loadFile.java b/src/loadFile.java index 9bd5842..1274574 100644 --- a/src/loadFile.java +++ b/src/loadFile.java @@ -4,7 +4,7 @@ import java.nio.file.*; import java.util.*; import java.util.stream.Collectors; public class loadFile { - // 读取该用户文件夹下已有题目的所有题目文本(每行一个题目或跨行拼接) + // 读取该用户文件夹下已有题目的所有题目文本 public static List loadExistingQuestions(String username) { List all = new ArrayList<>(); Path userDir = Paths.get("data", username); @@ -13,37 +13,37 @@ public class loadFile { DirectoryStream ds = Files.newDirectoryStream(userDir, "*.txt"); for (Path p : ds) { List lines = Files.readAllLines(p, StandardCharsets.UTF_8); - // 将文件中按题号拆分题目 —— 假设格式 "1. xxx" 开头。我们做简单处理:每个题号开头的新题。 + // 将文件中按题号拆分题目 StringBuilder cur = new StringBuilder(); for (String line : lines) { + //识别题号 if (line.matches("^\\s*\\d+\\..*")) { - // 新题开始 -> 保存旧题 - if (cur.length() > 0) { + // 新题开始 保存旧题 + if (!cur.isEmpty()) { all.add(cur.toString().trim()); } cur.setLength(0); + //去题号 cur.append(line.replaceFirst("^\\s*\\d+\\.", "").trim()); } else { // 继续当前题(空行也可能出现) if (line.trim().isEmpty()) { - // treat as separator; finish current if non-empty - if (cur.length() > 0) { + if (!cur.isEmpty()) { all.add(cur.toString().trim()); cur.setLength(0); } } else { - if (cur.length() > 0) cur.append(" "); + if (!cur.isEmpty()) cur.append(" "); cur.append(line.trim()); } } } - if (cur.length() > 0) all.add(cur.toString().trim()); + if (!cur.isEmpty()) all.add(cur.toString().trim()); } } catch (IOException e) { // ignore, return what we have } - // dedupe and return + // 转链式 去空格 去空字符串 去重 转回list return all.stream().map(String::trim).filter(s->!s.isEmpty()).distinct().collect(Collectors.toList()); - } - + } } diff --git a/src/login.java b/src/login.java index f135ba1..95beeec 100644 --- a/src/login.java +++ b/src/login.java @@ -1,7 +1,6 @@ import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; -import java.util.Random; import java.util.Scanner; public class login { @@ -19,7 +18,6 @@ public class login { private static final Map accounts = new HashMap<>(); private static final Scanner scanner = new Scanner(System.in, StandardCharsets.UTF_8); - //private static final Random rand = new Random(); // 初始化预设账号 // 初始Map索引 diff --git a/src/questionGenerator.java b/src/questionGenerator.java index b491c6c..a2a8a84 100644 --- a/src/questionGenerator.java +++ b/src/questionGenerator.java @@ -5,10 +5,10 @@ import java.util.stream.Collectors; public class questionGenerator { private static final Random rand = new Random(); + static class QuestionGenerator { private final login.Level level; private final Set existing; - private final int maxAttempts = 2000; // 防止死循环 QuestionGenerator(login.Level level, List existingQuestions) { this.level = level; @@ -18,6 +18,8 @@ public class questionGenerator { List generatePaper(int n) { Set generated = new LinkedHashSet<>(); int attempts = 0; + // 防止死循环 + int maxAttempts = 2000; while (generated.size() < n && attempts < maxAttempts) { attempts++; String q = generateOneQuestion(); @@ -37,16 +39,14 @@ public class questionGenerator { return s.replaceAll("\\s+","").toLowerCase(); } - // 生成单题主逻辑 // 生成单题主逻辑 private String generateOneQuestion() { int operands = rand.nextInt(4) + 2; // 保证 2..5 个操作数 - switch (level) { - case PRIMARY: return genPrimary(operands); - case MIDDLE: return genMiddle(operands); - case HIGH: return genHigh(operands); - default: return genPrimary(operands); - } + return switch (level) { + case PRIMARY -> genPrimary(operands); + case MIDDLE -> genMiddle(operands); + case HIGH -> genHigh(operands); + }; } // 生成小学题(只有 + - * / 和括号) private String genPrimary(int operands) { diff --git a/src/savepaper.java b/src/savepaper.java index 4bcb6d5..922075b 100644 --- a/src/savepaper.java +++ b/src/savepaper.java @@ -7,6 +7,7 @@ public class savepaper { // 保存试卷,返回保存路径字符串 public static String savePaper(String username, List paper) { Path userDir = Paths.get("data", username); + //识别文件夹 try { if (!Files.exists(userDir)) Files.createDirectories(userDir); } catch (IOException e) { @@ -18,14 +19,16 @@ public class savepaper { try (BufferedWriter bw = Files.newBufferedWriter(file, StandardCharsets.UTF_8)) { for (int i = 0; i < paper.size(); i++) { bw.write((i+1) + ". " + paper.get(i)); + //换行 bw.newLine(); + //空一行 bw.newLine(); } } catch (IOException e) { System.out.println("保存文件失败:" + e.getMessage()); return "保存失败"; } + //返回文件位置 return file.toString(); } - }