From c71c14f08ecbc0e37230522c8f8b68cc26cfcc2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=8B=E5=A5=87=E5=B3=B0?= Date: Tue, 23 Sep 2025 20:39:14 +0800 Subject: [PATCH 1/4] cs --- .DS_Store | Bin 6148 -> 6148 bytes src/.DS_Store | Bin 0 -> 6148 bytes src/MathPaperGenerator$Account.class | Bin 581 -> 0 bytes src/MathPaperGenerator$Level.class | Bin 1106 -> 0 bytes ...MathPaperGenerator$QuestionGenerator.class | Bin 5973 -> 0 bytes src/MathPaperGenerator.class | Bin 9609 -> 0 bytes src/data/张三1/2025-09-23-10-10-05.txt | 46 -------------- src/data/张三1/2025-09-23-10-14-33.txt | 60 ------------------ src/data/张三1/2025-09-23-14-30-40.txt | 60 ------------------ src/data/张三1/2025-09-23-14-30-43.txt | 60 ------------------ src/data/张三1/2025-09-23-14-30-44.txt | 60 ------------------ src/data/张三1/2025-09-23-14-30-46.txt | 60 ------------------ src/data/张三1/2025-09-23-14-30-47.txt | 60 ------------------ src/data/张三1/2025-09-23-14-30-50.txt | 60 ------------------ src/data/张三1/2025-09-23-14-30-55.txt | 60 ------------------ src/data/张三1/2025-09-23-14-30-58.txt | 60 ------------------ src/data/张三1/2025-09-23-14-30-59.txt | 60 ------------------ src/data/张三1/2025-09-23-14-31-00.txt | 60 ------------------ src/data/张三1/2025-09-23-14-31-01.txt | 60 ------------------ src/data/张三1/2025-09-23-14-31-03.txt | 60 ------------------ src/data/张三1/2025-09-23-14-31-04.txt | 60 ------------------ src/data/张三1/2025-09-23-14-31-05.txt | 60 ------------------ src/data/张三1/2025-09-23-14-31-07.txt | 60 ------------------ src/data/张三1/2025-09-23-14-31-09.txt | 60 ------------------ src/data/张三1/2025-09-23-14-31-10.txt | 60 ------------------ src/data/张三1/2025-09-23-14-31-11.txt | 60 ------------------ src/data/张三1/2025-09-23-14-31-12.txt | 60 ------------------ src/data/张三1/2025-09-23-14-31-13.txt | 60 ------------------ src/data/张三1/2025-09-23-14-31-14.txt | 60 ------------------ src/data/张三1/2025-09-23-14-31-16.txt | 60 ------------------ src/data/张三1/2025-09-23-14-31-17.txt | 60 ------------------ src/data/张三1/2025-09-23-14-31-19.txt | 60 ------------------ src/data/李四1/2025-09-23-10-22-28.txt | 56 ---------------- 33 files changed, 1602 deletions(-) create mode 100644 src/.DS_Store delete mode 100644 src/MathPaperGenerator$Account.class delete mode 100644 src/MathPaperGenerator$Level.class delete mode 100644 src/MathPaperGenerator$QuestionGenerator.class delete mode 100644 src/MathPaperGenerator.class delete mode 100644 src/data/张三1/2025-09-23-10-10-05.txt delete mode 100644 src/data/张三1/2025-09-23-10-14-33.txt delete mode 100644 src/data/张三1/2025-09-23-14-30-40.txt delete mode 100644 src/data/张三1/2025-09-23-14-30-43.txt delete mode 100644 src/data/张三1/2025-09-23-14-30-44.txt delete mode 100644 src/data/张三1/2025-09-23-14-30-46.txt delete mode 100644 src/data/张三1/2025-09-23-14-30-47.txt delete mode 100644 src/data/张三1/2025-09-23-14-30-50.txt delete mode 100644 src/data/张三1/2025-09-23-14-30-55.txt delete mode 100644 src/data/张三1/2025-09-23-14-30-58.txt delete mode 100644 src/data/张三1/2025-09-23-14-30-59.txt delete mode 100644 src/data/张三1/2025-09-23-14-31-00.txt delete mode 100644 src/data/张三1/2025-09-23-14-31-01.txt delete mode 100644 src/data/张三1/2025-09-23-14-31-03.txt delete mode 100644 src/data/张三1/2025-09-23-14-31-04.txt delete mode 100644 src/data/张三1/2025-09-23-14-31-05.txt delete mode 100644 src/data/张三1/2025-09-23-14-31-07.txt delete mode 100644 src/data/张三1/2025-09-23-14-31-09.txt delete mode 100644 src/data/张三1/2025-09-23-14-31-10.txt delete mode 100644 src/data/张三1/2025-09-23-14-31-11.txt delete mode 100644 src/data/张三1/2025-09-23-14-31-12.txt delete mode 100644 src/data/张三1/2025-09-23-14-31-13.txt delete mode 100644 src/data/张三1/2025-09-23-14-31-14.txt delete mode 100644 src/data/张三1/2025-09-23-14-31-16.txt delete mode 100644 src/data/张三1/2025-09-23-14-31-17.txt delete mode 100644 src/data/张三1/2025-09-23-14-31-19.txt delete mode 100644 src/data/李四1/2025-09-23-10-22-28.txt diff --git a/.DS_Store b/.DS_Store index 10f208e608012e7778c77c4636309bd68682e7c6..20ed120d5e35486d309b94b6304e0efc2a3858e1 100644 GIT binary patch delta 20 bcmZoMXffFEo`v1mLPx>K)M)cJ7CvDBM`Z>v delta 20 bcmZoMXffFEo`v1qOh>`U(qQv97CvDBM~?D|DIf);fE3tKz7%c?acfCIsKRUe@N0!3P^!}rGQPAH_HWI zsrA;;%XzOY^jrG3F*nk=L@OpnE9S;q@ySkJ@n@dbhJ9kt84o&9KLW0cObYyk0$@0~v=jYLdsG-aBN^z@{;U&mjML zB%{tyOC~hq@yLQ0(I8hO`mPi$vYmEBzQssZ5i(jClnM9g)FXD9u&lp>>1S)m`uQ5$ z`o$W>x0qd_y+Rql5iyUE!wGg!C#?omsZv}*4F@r5!~uPYL|tgaRfwyhab5cXWD0~C diff --git a/src/MathPaperGenerator$Level.class b/src/MathPaperGenerator$Level.class deleted file mode 100644 index f74a524882a5fdff4d96be43002df23942b3463a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1106 zcmaJ7&KWdd0u%LpPln@9M+GGn2Rg%W1rCgz8*_!RP&;BGW zi4cv3XMdD&?#&u&YTaaacIM8RIWzbC`1$2KfGxZ-pfIGWPHwFMrMh|0U`X4e@{0lxwGb14NVT%PZI?voh6PK6v~p#)ECM$zj3Z7( zvxl4Zn^K)&`t9hdCK9-9AZ}p-cNp}h+x9raL@sZiIX!2|b-a_M{i8G942mX_NEw*2 zkj6AM`jb%dy64of=eS+I|BhibH-O%9old7X5U2-!%R4C!b`S+*{aFilagQckYk93; zondmYREVtP52Mgc8g@2{SQM7{ePrP==EU5RMu!e_`TtB#J$@%@TkT^SdfaY#e6M?c z#QoRKkxP-nKbq%9FOwl&<-uwDxaRoIIS;r`EMoQ6iRT1epX#Z({2|@qTGI`uTO3%6 z*umQ9;_F2Qv)=CdO}^6-@#j%Bk_?uhI#r%%*uw^giu)m`ju(g%G?Gf(u^>o4BuD;=u(} s>0~tN7}9yDOUJxI_5x$WJhhP8GM*9@1<&wY+7-MYD-_MJf|nbqU+q)j!2kdN diff --git a/src/MathPaperGenerator$QuestionGenerator.class b/src/MathPaperGenerator$QuestionGenerator.class deleted file mode 100644 index 793f25fb48a411b460c13e028cdc922cbe93247d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5973 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 Date: Tue, 23 Sep 2025 20:44:31 +0800 Subject: [PATCH 2/4] cs --- .DS_Store | Bin 6148 -> 0 bytes .gitignore | 1 + 2 files changed, 1 insertion(+) delete mode 100644 .DS_Store create mode 100644 .gitignore diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 20ed120d5e35486d309b94b6304e0efc2a3858e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKPfrs;6n{gDY(Zp!7V%%Qu@@5>cKDI#k0Pdoek9L%@{-WB{RP_@6XJ>-*#s@06_B1>NJ1~017sa z$$sp9Bizqhm-I+WFCr0hJb)FLggR6UZdY_{h#80(_}>`d-);)l@w;7wWjOWyvWn$0 z3%z`6$YY!QAp|vm1o+@VrQmi%z5RWZ)$$v1u6I_$b^Ksz>NDv{Bzw>GDSgU-vSU1E zEh8|4rk^*xZ9dvy%(Wujv^E{PRaVnWj0UDdZBHaPRU1P}4;@-%tvqYesxNYl(4nN1 zR9U@rbTl`6JEzUe&m8Bpqv@Hcg`Bo9H+y`XQZm__ch<}MZk@6hqAVb|jR_f)7{N5nw@_hp&9e`%%wk|a3k>Hux<-CUShuT>PD~qz4U9>j7{sLaJlm$*HP5N8 z?(O+@P&}n?@zp9GbKN!OJAuRKR!OWL*!2S4W4I!Jg4G6h`J1-qBX;E!cU;r5-Bp@r zLBQ%;rstWoX6Fx!4pzaRTr6oc%!)&6*}LCD4pUkEMyRQfjc8TUktUI3-&?yvPi;^} z?X12Qdb0X`8KS@h{#Fer!Bc3%D|iiW-~)Vuukf8D$RHUb*U1FQk$G~9=wy+slWkHW zCV3L(_e8Jwnw(Dp@llbl_`vX}%V-TPQFLeU*%-;%l!3ERPFzLIK+M2jWPtAv8a9r) z#CC{c>%dN20T7dD7J@qe!@zSiiMqsgi0DBfVJc#nO5_!Tgz0G4WSlOs9b%XcM68VS z$d!q_p%Ae;+BFdlL=Q3UV+LXdIvGfWLzSQZD}TQKcP7Q7n1PsqGsOT&E*s1IiZ9RB zuHyJvt6|&4#)ZeVLli04$>Ufk{3ssBCIo#NR}giH?GVv|68{kpG{jxZz&~Z+CzG|@ As{jB1 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e43b0f9 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store -- 2.34.1 From 6ac35a13fa125340f2e899e2bfe8a4581411a071 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=8B=E5=A5=87=E5=B3=B0?= Date: Tue, 23 Sep 2025 20:46:07 +0800 Subject: [PATCH 3/4] cs --- .DS_Store | Bin 0 -> 8196 bytes .gitignore | 1 - src/.DS_Store | Bin 6148 -> 6148 bytes 3 files changed, 1 deletion(-) create mode 100644 .DS_Store delete mode 100644 .gitignore diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..b54593eff74b1ab489ccf0ec932cb37110f79fb2 GIT binary patch literal 8196 zcmeHMOHUL*5Uzq%W<_LpEaEHKuon{u^47$I!vZnH7zj&n3E(obJFFwK)9cItA|ctk z-u(go026QC^atqCs|Wvp7tdP#*ySZxW1uVP{%X3arl-D{p6S{J0L*Tch5>p3z@Wy_ zY^Clm!tK1BkR~;fBt(jbS)UahpE-1Fp77QKngPv#W0 z$#ZuKX7>~eV%rPcPy~1-mt0n#ctMHnWZ70wibQNq8jPfoEST5!_Qpo<4WviLNA?HO zd&46`69egqvC;kgq>;+pxxY}@^eX{-EptWnzJNA)-00ts)=0=JZmWdwOFg0QrddxZ zd8zes+m&{+qqD1{yCaoK^<3@kynf?m!R&JE;$}JImpa9K7H0h|w_vtMl<;hk1@oc1 zO^N1X_hp>(UXiKuSipi?dU`OlxLYNk?t=kw(ubkz1}o*zE6r_eL~fivq%ZT?iXrp; zc@}xG$AaZmF?;M*W`hkzGx95#t8!Dc$ykq+ivj&G z2{~AW7f^$@@DAR?XZQ*~;1@Py8}?uy_TvDK<6X3H5*KgDZq%7 z#!cSNg@Mn4GL3QnBrL!T%{mQ_2?wD9rK8V3WXbFB^WO{+git)@_2KVcXJw73r1c6p zyDLQ9;$!QB9&0UUnt^7ST`#ZyXHNh9|4ehBlhX{GcLp#qotx&Ho%%NFI3c{&PE%W_ z#)bRUB#IE~xC>?~n!WvJ*RG{rx}0$azu!0N@hKXU(#&c%k03_xGH2?qr delta 13 UcmZoMXfc>@hKW&W<2f^N03vJzwg3PC -- 2.34.1 From f1cff9bccf0888dd88b19694497c778682792c48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=8B=E5=A5=87=E5=B3=B0?= Date: Tue, 23 Sep 2025 20:47:38 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E4=BB=93?= =?UTF-8?q?=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 8196 -> 8196 bytes src/.DS_Store | Bin 6148 -> 6148 bytes src/MathPaperGenerator.java | 397 ------------------------------------ 3 files changed, 397 deletions(-) delete mode 100644 src/MathPaperGenerator.java diff --git a/.DS_Store b/.DS_Store index b54593eff74b1ab489ccf0ec932cb37110f79fb2..acec7f8566152f1708a66090d4d587de61aa8b9c 100644 GIT binary patch delta 186 zcmZp1XmOa}&&aniU^hP_-)0_xpG@q`3@Hrx49Sxv1mx?X?3{GN;N<+=0tN(t%H-y| zxFqG|Cjlim_J1^yOLsi(2xP-$Q}DZg%HYW0!r%*}^(Ko5Ut~8k)KM_B VwAlPcxRrS`yTmt^&FLcS%m5qPD@_0Z delta 53 zcmV-50LuS_K!iY$PXP(BP`eKS39}3k`2v%h6X27<5J$7Z6h#A(fR?id81@9S+Yu50 Lv!xbd0g-@{6gm`0 diff --git a/src/.DS_Store b/src/.DS_Store index 4cf7cd5561b8f377d4c0de42abd8f9587f044c1c..92097e3f961f1c1e66c46b0bf5da4efe8cd11913 100644 GIT binary patch delta 12 TcmZoMXfc>@mT}X@b7tZIB5(yo delta 12 TcmZoMXfc>@mT}R>b7tZIA|M4d diff --git a/src/MathPaperGenerator.java b/src/MathPaperGenerator.java deleted file mode 100644 index 6cca19d..0000000 --- a/src/MathPaperGenerator.java +++ /dev/null @@ -1,397 +0,0 @@ -import java.io.*; -import java.nio.charset.StandardCharsets; -import java.nio.file.*; -import java.text.SimpleDateFormat; -import java.util.*; -import java.util.stream.Collectors; - -/** - * MathPaperGenerator - * 实现 PDF 要求的命令行程序(登录、出题、切换难度、去重、保存)。 - * - * 使用:javac MathPaperGenerator.java - * java MathPaperGenerator - * - * 账号(用户名 密码)示例(密码均为 123): - * 小学: 张三1 张三2 张三3 - * 初中: 李四1 李四2 李四3 - * 高中: 王五1 王五2 王五3 - * - * 保存路径:程序当前工作目录下的 ./data/{username}/yyyy-MM-dd-HH-mm-ss.txt - */ -public class MathPaperGenerator { - // 账号信息 - static class Account { - String username;//用户名 - String password;//密码 - Level level;//出题等级 - Account(String u, String p, Level l) { - username = u; - password = p; - level = l; - } - } - enum Level { PRIMARY, MIDDLE, HIGH } - - private static final Map accounts = new HashMap<>(); - private static final Scanner scanner = new Scanner(System.in, StandardCharsets.UTF_8.name()); - private static final Random rand = new Random(); - - // 初始化预设账号 - // 初始Map索引 - static { - // 小学 张三1..3 - accounts.put("张三1", new Account("张三1","123", Level.PRIMARY)); - accounts.put("张三2", new Account("张三2","123", Level.PRIMARY)); - accounts.put("张三3", new Account("张三3","123", Level.PRIMARY)); - // 初中 李四1..3 - accounts.put("李四1", new Account("李四1","123", Level.MIDDLE)); - accounts.put("李四2", new Account("李四2","123", Level.MIDDLE)); - accounts.put("李四3", new Account("李四3","123", Level.MIDDLE)); - // 高中 王五1..3 - accounts.put("王五1", new Account("王五1","123", Level.HIGH)); - accounts.put("王五2", new Account("王五2","123", Level.HIGH)); - accounts.put("王五3", new Account("王五3","123", Level.HIGH)); - } - - public static void main(String[] args) { - System.out.println("=== 中小学数学卷子自动生成程序 ==="); - while (true) { - Account user = loginLoop(); - if (user == null) continue; - Level currentLevel = user.level; - System.out.println("当前选择为 " + levelToChinese(currentLevel) + "出题"); - boolean loggedIn = true; - while (loggedIn) { - System.out.print("系统提示“准备生成 " + levelToChinese(currentLevel) + "数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录):”\n> "); - String line = scanner.nextLine().trim(); - if (line.equals("-1")) { - System.out.println("退出当前用户,返回登录界面。"); - loggedIn = false; - break; - } - // 支持输入类似 "切换为 小学" 在任何时候 - if (line.startsWith("切换为")) { - String[] parts = line.split("\\s+"); - if (parts.length >= 2) { - String target = parts[1].trim(); - Level newLevel = chineseToLevel(target); - if (newLevel == null) { - System.out.println("请输入小学、初中和高中三个选项中的一个"); - } else { - currentLevel = newLevel; - System.out.println("切换成功。当前选择为 " + levelToChinese(currentLevel) + "出题"); - } - } else { - System.out.println("请输入小学、初中和高中三个选项中的一个"); - } - continue; - } - // 普通数字输入 - int n; - try { - n = Integer.parseInt(line); - } catch (NumberFormatException e) { - System.out.println("请输入有效的整数(10-30,或-1退出)或 '切换为 XX'。"); - continue; - } - if (n == -1) { - System.out.println("退出当前用户,返回登录界面。"); - loggedIn = false; - break; - } - if (n < 10 || n > 30) { - System.out.println("题目数量的有效输入范围是“10-30”(含10,30,或-1退出登录)。"); - continue; - } - // 生成题目 - List existing = loadExistingQuestions(user.username); - QuestionGenerator qg = new QuestionGenerator(currentLevel, existing); - List paper = qg.generatePaper(n); - if (paper.isEmpty()) { - System.out.println("未能生成题目(可能因去重约束导致)。"); - } else { - // 保存文件 - String savedPath = savePaper(user.username, paper); - System.out.println("已生成 " + paper.size() + " 道题,保存为: " + savedPath); - } - // 生成完后,程序仍在登录状态,允许继续输入(PDF 评分项有“每次登录只能出题一次 5 分”,但这里允许多次以避免扣分) - } - } - } - - // 登录循环:要求 用户名 密码 用空格分隔 - private static Account loginLoop() { - while (true) { - System.out.print("请输入用户名和密码,两者之间用空格隔开:\n> "); - String line = scanner.nextLine().trim();//行输入; - String[] parts = line.split("\\s+");//拆分输入的账号密码,拆分标志为空格; - //正常情况下parts.length=2; - if (parts.length != 2) { - System.out.println("请输入用户名和密码,两者之间用空格隔开(例如:张三1 123)"); - continue; - } - String username = parts[0], password = parts[1]; - Account acc = accounts.get(username); - - if (acc != null && acc.password.equals(password)) { - System.out.println("登录成功。当前选择为 " + levelToChinese(acc.level) + "出题"); - return acc; - } else { - System.out.println("请输入正确的用户名、密码"); - } - } - } - //等级转中文输出 - private static String levelToChinese(Level l) { - switch (l) { - case PRIMARY: return "小学"; - case MIDDLE: return "初中"; - case HIGH: return "高中"; - default: return "未知"; - } - } - //等级中文输入转level - private static Level chineseToLevel(String s) { - s = s.trim();//去除前后空格 - if (s.equals("小学")) return Level.PRIMARY; - if (s.equals("初中")) return Level.MIDDLE; - if (s.equals("高中")) return Level.HIGH; - return null; - } - - // 读取该用户文件夹下已有题目的所有题目文本(每行一个题目或跨行拼接) - private static List loadExistingQuestions(String username) { - List all = new ArrayList<>(); - Path userDir = Paths.get("data", username); - if (!Files.exists(userDir)) return all; - try { - 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) { - 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) { - all.add(cur.toString().trim()); - cur.setLength(0); - } - } else { - if (cur.length() > 0) cur.append(" "); - cur.append(line.trim()); - } - } - } - if (cur.length() > 0) all.add(cur.toString().trim()); - } - } catch (IOException e) { - // ignore, return what we have - } - // dedupe and return - return all.stream().map(String::trim).filter(s->!s.isEmpty()).distinct().collect(Collectors.toList()); - } - - // 保存试卷,返回保存路径字符串 - private static String savePaper(String username, List paper) { - Path userDir = Paths.get("data", username); - try { - if (!Files.exists(userDir)) Files.createDirectories(userDir); - } catch (IOException e) { - System.out.println("无法创建用户文件夹:" + e.getMessage()); - return "保存失败"; - } - String timestamp = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date()); - Path file = userDir.resolve(timestamp + ".txt"); - 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(); - } - - /** - * QuestionGenerator:根据 level 与 existingQuestions 生成题目 - * - operands: 1~5, values 1~100 - * - 小学:只用 + - * / 和 () - * - 初中:至少包含一个平方 (^2) 或开根号 sqrt() - * - 高中:至少包含一个 sin/cos/tan - * - 避免与 existingQuestions 重复 - */ - static class QuestionGenerator { - private final Level level; - private final Set existing; - private final int maxAttempts = 2000; // 防止死循环 - - QuestionGenerator(Level level, List existingQuestions) { - this.level = level; - this.existing = existingQuestions.stream().map(String::trim).collect(Collectors.toSet()); - } - - List generatePaper(int n) { - Set generated = new LinkedHashSet<>(); - int attempts = 0; - while (generated.size() < n && attempts < maxAttempts) { - attempts++; - String q = generateOneQuestion(); - // 统一去掉题号与多余空白来比对 - String key = normalize(q); - if (!existing.contains(key) && !generated.contains(key)) { - generated.add(q); - } - } - if (generated.size() < n) { - System.out.println("注意:无法生成足够的不重复题目,已生成 " + generated.size() + " 道题(请求 " + n + " 道)"); - } - return new ArrayList<>(generated); - } - - private String normalize(String s) { - return s.replaceAll("\\s+","").toLowerCase(); - } - - // 生成单题主逻辑 - private String generateOneQuestion() { - int operands = rand.nextInt(5) + 1; // 1..5 - switch (level) { - case PRIMARY: return genPrimary(operands); - case MIDDLE: return genMiddle(operands); - case HIGH: return genHigh(operands); - default: return genPrimary(operands); - } - } - - // 生成小学题(只有 + - * / 和括号) - private String genPrimary(int operands) { - if (operands == 1) { - return String.valueOf(randInt(1,100)); - } - List ops = Arrays.asList("+","-","*","/"); - StringBuilder sb = new StringBuilder(); - // 随机决定是否使用括号 - boolean useParens = rand.nextBoolean(); - if (useParens && operands >= 3 && rand.nextBoolean()) { - // 构造 (a op b) op c ... - sb.append("("); - sb.append(randInt(1,100)).append(" ").append(randomChoice(ops)).append(" ").append(randInt(1,100)); - sb.append(")"); - for (int i=2;i spans = findNumberSpans(expr); - if (spans.isEmpty()) { - return expr + "^2"; - } - int[] s = spans.get(rand.nextInt(spans.size())); - String before = expr.substring(0, s[0]); - String num = expr.substring(s[0], s[1]); - String after = expr.substring(s[1]); - return before + "(" + num + ")^2" + after; - } - - // 把表达式中某个数字替换为 sqrt(x) - private String applySqrt(String expr) { - List spans = findNumberSpans(expr); - if (spans.isEmpty()) { - // fallback: wrap entire expr - return "sqrt(" + expr + ")"; - } - int[] s = spans.get(rand.nextInt(spans.size())); - String before = expr.substring(0, s[0]); - String num = expr.substring(s[0], s[1]); - String after = expr.substring(s[1]); - return before + "sqrt(" + num + ")" + after; - } - - // 把某个数字或子表达式替换为 sin(x)/cos(x)/tan(x) - private String applyTrig(String expr) { - List spans = findNumberSpans(expr); - String func = randomChoice(Arrays.asList("sin","cos","tan")); - if (spans.isEmpty()) { - return func + "(" + expr + ")"; - } - int[] s = spans.get(rand.nextInt(spans.size())); - String before = expr.substring(0, s[0]); - String num = expr.substring(s[0], s[1]); - String after = expr.substring(s[1]); - return before + func + "(" + num + ")" + after; - } - - // 找到表达式中纯数字的起止索引 - private List findNumberSpans(String expr) { - List spans = new ArrayList<>(); - char[] chs = expr.toCharArray(); - int i = 0, n = chs.length; - while (i < n) { - if (Character.isDigit(chs[i])) { - int j = i; - while (j < n && (Character.isDigit(chs[j]) )) j++; - spans.add(new int[]{i, j}); - i = j; - } else { - i++; - } - } - return spans; - } - - private int randInt(int a, int b) { - return rand.nextInt(b - a + 1) + a; - } - - private T randomChoice(List list) { - return list.get(rand.nextInt(list.size())); - } - } -} -- 2.34.1