Update Generator.java

pull/3/head
hnu202326010305 6 days ago
parent 345f15cf6a
commit 4c0486861b

@ -1,31 +1,96 @@
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
/**
*
*/
public class Generator {
//生成题目并保存到用户文件夹
public static void generate(Users users, int count, ProblemsGenerator problemsGenerator) {
Set<String> history = loadHistory(users);
StringBuilder builder = new StringBuilder();
for (int i = 1; i <= count; i++) {
builder.append(i).append(". ").append(problemsGenerator.generate()).append("\n\n");
String problem;
int tries = 0;
do {
problem = problemsGenerator.generate();
tries++;
if (tries >= 20) {
System.out.println("警告:尝试 20 次仍未生成新题目,可能题目库有限。");
break;
}
} while (history.contains(problem));
history.add(problem);
builder.append(i).append(". ").append(problem).append("\n\n");
}
save(users, builder.toString());
System.out.println("题目生成完成。");
}
/**
*
*/
private static Set<String> loadHistory(Users users) {
Set<String> history = new HashSet<>();
String safeName = users.getName().replaceAll("[^\\u4e00-\\u9fa5a-zA-Z0-9_]", "_");
String folder = "doc/" + safeName;
File dir = new File(folder);
if (!dir.exists()) return history;
File[] files = dir.listFiles((d, name) -> name.endsWith(".txt"));
if (files != null) {
for (File f : files) {
try (Scanner sc = new Scanner(f)) {
while (sc.hasNextLine()) {
String line = sc.nextLine().trim();
if (!line.isEmpty() && Character.isDigit(line.charAt(0))) {
int dot = line.indexOf('.');
if (dot != -1) line = line.substring(dot + 1).trim();
history.add(line);
}
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("读取历史题目失败:" + e.getMessage());
}
}
}
return history;
}
/**
*
*/
private static void save(Users users, String content) {
try {
String folder = "doc/" + users.getName();
java.io.File dir = new java.io.File(folder);
if (!dir.exists()) {
dir.mkdirs();
String safeName = users.getName().replaceAll("[^\\u4e00-\\u9fa5a-zA-Z0-9_]", "_");
String folder = "doc/" + safeName;
File dir = new File(folder);
if (!dir.exists() && !dir.mkdirs()) {
System.out.println("无法创建目录: " + folder);
return;
}
String filename = LocalDateTime.now()
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd-HH-mm-ss")) + ".txt";
FileWriter writer = new FileWriter(folder + "/" + filename);
writer.write(content);
writer.close();
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd-HH-mm-ss"))
+ "-" + (int) (Math.random() * 1000) + ".txt";
try (FileWriter writer = new FileWriter(folder + "/" + filename)) {
writer.write(content);
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("保存失败:" + e.getMessage());
}
}

Loading…
Cancel
Save