diff --git a/doc/README.md b/doc/README.md index 7a89b0c..a33387d 100644 --- a/doc/README.md +++ b/doc/README.md @@ -72,11 +72,54 @@ src/ ## 快速开始 ### 环境要求 -- Java 8 或更高版本 -- 至少100MB可用磁盘空间 -- 支持命令行操作的操作系统 + +#### 系统平台要求 +- **操作系统**:Windows 10/11、macOS 10.14+、Linux Ubuntu 18.04+ 或其他支持Java的命令行操作系统 +- **Java版本**:Java 17 或更高版本(推荐Java 21或Java 23) +- **磁盘空间**:至少100MB可用磁盘空间 +- **内存要求**:至少512MB可用内存 + +#### 环境配置 +1. **Java环境检查**: + ```bash + java -version + javac -version + ``` + 确保两个命令都能正确显示版本信息 + +2. **字符编码设置**(重要): + - 在Windows PowerShell中运行前,必须先设置UTF-8编码: + ```powershell + [Console]::InputEncoding = [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 + ``` + - 在CMD中,使用`chcp 65001`设置UTF-8编码 + - Linux/macOS系统通常默认支持UTF-8 + +3. **路径配置**: + - 确保Java的bin目录已添加到系统PATH环境变量中 + - 项目路径中不要包含中文或特殊字符 + +#### 运行参数 +- **默认参数**:程序运行无需额外参数 +- **内存设置**(可选):如需处理大量题目,可设置JVM内存: + ```bash + java -Xmx512m -cp bin App + ``` +- **编码强制设置**(如遇到乱码): + ```bash + java -Dfile.encoding=UTF-8 -cp bin App + ``` ### 编译项目 + +#### 终端运行前准备 +**重要**:在运行程序前,请先在终端中执行以下命令设置UTF-8编码: + +```powershell +# Windows PowerShell(必须执行) +[Console]::InputEncoding = [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 +``` + ```bash # 进入项目目录 cd 1 @@ -84,17 +127,23 @@ cd 1 # 编译所有Java源文件 javac -d bin src/*.java -# 或者使用批处理方式(Windows) +# Windows系统也可使用: javac -d bin src\*.java ``` ### 运行程序 + ```bash -# 运行主程序 +# 运行主程序(确保已执行上述编码设置) java -cp bin App # 或者指定类路径 java -classpath bin App + +# 完整命令示例(包含编码设置和运行): +[Console]::InputEncoding = [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 +cd 1 +java -cp bin App ``` ## 使用指南 @@ -186,4 +235,4 @@ java -classpath bin App --- -*最后更新:2025年9月27日* +*最后更新:2025年9月28日* diff --git a/src/App.java b/src/App.java index 3e7d07d..d640b06 100644 --- a/src/App.java +++ b/src/App.java @@ -1,14 +1,12 @@ package src; -import java.util.Map; import java.util.Scanner; import java.util.Set; public class App { private static final Scanner scanner = new Scanner(System.in); - private static final Map users = User.getPresetUsers(); - private static final FileManager fileManager = new FileManager(); + private static final FileManager FILE_MANAGER = new FileManager(); private static QuestionGenerator currentGenerator; private static String currentUsername; @@ -38,21 +36,19 @@ public class App { System.out.println("当前选择为 " + userType + " 出题"); // 加载已存在的题目用于查重 - Set existingQuestions = fileManager.loadExistingQuestions(currentUsername); + Set existingQuestions = FILE_MANAGER.loadExistingQuestions(currentUsername); for (String question : existingQuestions) { currentGenerator.addToGenerated(question); } // 主循环 - boolean stayLoggedIn = true; - while (stayLoggedIn) { + while (true) { System.out.println("\n准备生成 " + currentGenerator.getCurrentType() + " 数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录):"); String input = scanner.nextLine().trim(); if (input.equals("-1")) { - stayLoggedIn = false; System.out.println("退出当前用户..."); break; } @@ -81,7 +77,7 @@ public class App { private static User login() { while (true) { System.out.println("\n请输入用户名和密码(用空格隔开):"); - System.out.println("如果需要注册新用户,请输入'register'"); + System.out.println("如果需要注册新用户,请输入'注册'"); System.out.println("如果需要退出程序,请输入'-1'"); String input = scanner.nextLine(); String[] credentials = input.split("\\s+"); @@ -92,7 +88,7 @@ public class App { } // 处理注册请求 - if (credentials[0].equalsIgnoreCase("register")) { + if (credentials[0].equalsIgnoreCase("注册")) { handleRegistration(); continue; } @@ -226,7 +222,7 @@ public class App { } // 重新加载已存在的题目用于查重 - Set existingQuestions = fileManager.loadExistingQuestions(currentUsername); + Set existingQuestions = FILE_MANAGER.loadExistingQuestions(currentUsername); for (String question : existingQuestions) { currentGenerator.addToGenerated(question); } @@ -246,7 +242,7 @@ public class App { } try { - fileManager.saveQuestions(currentUsername, questions); + FILE_MANAGER.saveQuestions(currentUsername, questions); System.out.println("题目生成完成!"); } catch (Exception e) { System.out.println("保存文件时出错: " + e.getMessage()); diff --git a/src/FileManager.java b/src/FileManager.java index 504b04a..4561731 100644 --- a/src/FileManager.java +++ b/src/FileManager.java @@ -77,7 +77,7 @@ public class FileManager { StringBuilder questionBuilder = new StringBuilder(); while ((line = reader.readLine()) != null) { if (line.trim().isEmpty()) { - if (questionBuilder.length() > 0) { + if (!questionBuilder.isEmpty()) { // 移除题号 String question = questionBuilder.toString().replaceAll("^\\d+\\.\\s*", ""); existingQuestions.add(question.trim()); @@ -88,7 +88,7 @@ public class FileManager { } } // 处理最后一个题目 - if (questionBuilder.length() > 0) { + if (!questionBuilder.isEmpty()) { String question = questionBuilder.toString().replaceAll("^\\d+\\.\\s*", ""); existingQuestions.add(question.trim()); } diff --git a/src/HighSchoolGenerator.java b/src/HighSchoolGenerator.java index 728174e..2488671 100644 --- a/src/HighSchoolGenerator.java +++ b/src/HighSchoolGenerator.java @@ -23,7 +23,7 @@ public class HighSchoolGenerator extends QuestionGenerator { private String generateSingleQuestion() { int operatorCount = generateOperatorCount(); StringBuilder questionBuilder = new StringBuilder(); - boolean hasTrigFunction = false; + boolean hasTrigFunction; // 生成第一个操作数或三角函数 hasTrigFunction = processFirstOperandOrTrig(questionBuilder); diff --git a/src/MiddleSchoolGenerator.java b/src/MiddleSchoolGenerator.java index 79c024a..53ef003 100644 --- a/src/MiddleSchoolGenerator.java +++ b/src/MiddleSchoolGenerator.java @@ -23,7 +23,7 @@ public class MiddleSchoolGenerator extends QuestionGenerator { private String generateSingleQuestion() { int operatorCount = generateOperatorCount(); StringBuilder questionBuilder = new StringBuilder(); - boolean hasAdvancedOperator = false; + boolean hasAdvancedOperator; // 生成第一个操作数 int firstOperand = generateOperand(); diff --git a/src/QuestionGenerator.java b/src/QuestionGenerator.java index ae70756..9c39f20 100644 --- a/src/QuestionGenerator.java +++ b/src/QuestionGenerator.java @@ -21,11 +21,11 @@ public abstract class QuestionGenerator { // 生成操作符数量 protected int generateOperatorCount() { - return random.nextInt(5) + 1; // 1-5个操作符 + return random.nextInt(5); // 1-5个操作符 } protected int generateOperatorCount_one() { - return random.nextInt(4) + 2; // 2-5个操作符 + return random.nextInt(4) + 1; // 2-5个操作符 } // 检查题目是否重复