You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java技术问题:使用随机读取文本文件行时如何避免重复

嘿,作为编程新手能写出可运行的代码已经超棒了!给《质量效应2》速通社区做随机技能生成器这个想法太酷啦😎

针对你的技能随机生成器优化建议

1. 拆分代码,提升可读性

新手阶段先把大逻辑拆成小方法,不仅自己后期改代码方便,社区伙伴也更容易看懂。比如把读取技能列表、生成随机技能、拼接控制台命令这些操作分开:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class ME2SkillRandomizer {
    // 抽成常量,改命令格式不用到处找
    private static final String SKILL_COMMAND_TEMPLATE = "giveSkill %s";

    // 单独负责读取技能文件
    private static List<String> loadSkillList(String filePath) throws IOException {
        List<String> skills = new ArrayList<>();
        // try-with-resources自动关流,避免资源泄漏
        try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
            String line;
            while ((line = reader.readLine()) != null) {
                // 跳过空行
                if (!line.trim().isEmpty()) {
                    skills.add(line.trim());
                }
            }
        }
        return skills;
    }

    // 单独生成随机技能,支持传入种子方便复现
    private static String getRandomSkill(List<String> skills, long seed) {
        Random random = new Random(seed);
        return skills.get(random.nextInt(skills.size()));
    }

    public static void main(String[] args) {
        try {
            List<String> skillList = loadSkillList("me2_skills.txt");
            // 用当前时间当种子,每次随机结果不同;固定种子的话可以复现同一场随机
            String randomSkill = getRandomSkill(skillList, System.currentTimeMillis());
            String consoleCommand = String.format(SKILL_COMMAND_TEMPLATE, randomSkill);
            System.out.println("生成的控制台命令:" + consoleCommand);
            // 这里可以加执行控制台命令的逻辑
        } catch (IOException e) {
            // 给友好提示,新手更容易排查问题
            System.err.println("出错啦:找不到技能文件,请检查文件路径是否正确");
            e.printStackTrace();
        }
    }
}

2. 优化异常处理

你代码里已经出现了FileNotFoundException,可以进一步给用户明确的错误提示(比如上面示例里的“找不到技能文件”),而不是只打印堆栈信息,这样速通社区里的伙伴用的时候能快速定位问题。

3. 给随机逻辑加可控性

速通社区可能需要复现同一组随机技能(比如测试特定速通路线),所以给随机数生成器加个种子参数非常实用——传入相同种子,就能得到完全一样的随机序列。

4. 控制台命令的兼容性

要确保拼接出来的命令完全符合《质量效应2》控制台的要求,比如技能代码的前缀、大小写是否敏感。可以把命令模板抽成常量,后期改格式只需要改这一行就行。

如果你的代码还有没写完的部分,或者运行时遇到了具体报错(比如技能生成不对、文件读取失败),把完整代码和问题细节贴出来,我能帮你更精准地解决~

内容的提问来源于stack exchange,提问作者Strife

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:10:54