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

如何从单个文本文件填充4个不同ArrayList?问答程序开发求助

多分类问答程序实现方案

嘿,我来帮你搞定这个多分类问答的需求!咱们一步步来,把单ArrayList的版本改成支持4类问题的结构,还能从单个文本文件批量填充数据~

第一步:完善Question类(添加分类属性)

首先,你的Question类需要加一个分类标识字段,这样读取文本时才能知道每个问题该归到哪一类。比如:

public class Question {
    private String content; // 问题内容
    private String answer; // 正确答案
    private int category; // 分类编号(1-4对应4类)

    // 构造方法、getter/setter按需补充
    public Question(String content, String answer, int category) {
        this.content = content;
        this.answer = answer;
        this.category = category;
    }

    // 省略getCategory()、getContent()、getAnswer()等方法
}

第二步:设计文本文件的格式

单个文本文件里,每行代表一个问题,用分隔符(比如|,注意别和问题内容里的字符冲突)把分类、问题、答案分开。示例格式如下:

1|ArrayList和LinkedList的底层实现有什么区别?|ArrayList基于动态数组,LinkedList基于双向链表
2|HTML中<label>标签的作用是什么?|绑定表单元素,提升可访问性
3|Python中list和tuple的核心差异?|list是可变的,tuple不可变
4|MySQL中GROUP BY的作用?|按指定字段分组聚合数据

这样程序读取时,就能通过分割每行字符串,把数据拆成分类、问题、答案三个部分。

第三步:修改Questions类,添加4个分类ArrayList

把原来的单个questions列表,改成4个对应不同分类的列表,再写一个读取文件填充列表的方法:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;

public class Questions {
    // 4个分类对应的ArrayList
    private ArrayList<Question> category1Questions = new ArrayList<>();
    private ArrayList<Question> category2Questions = new ArrayList<>();
    private ArrayList<Question> category3Questions = new ArrayList<>();
    private ArrayList<Question> category4Questions = new ArrayList<>();

    // 从文本文件加载所有问题的方法
    public void loadQuestionsFromFile(String filePath) {
        try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
            String line;
            while ((line = br.readLine()) != null) {
                // 跳过空行
                if (line.trim().isEmpty()) continue;
                // 分割每行数据,注意转义|(正则特殊字符)
                String[] parts = line.split("\\|");
                if (parts.length != 3) {
                    System.out.println("无效的问题格式:" + line);
                    continue;
                }
                int category = Integer.parseInt(parts[0].trim());
                String questionContent = parts[1].trim();
                String questionAnswer = parts[2].trim();

                // 根据分类添加到对应的列表
                Question question = new Question(questionContent, questionAnswer, category);
                switch (category) {
                    case 1:
                        category1Questions.add(question);
                        break;
                    case 2:
                        category2Questions.add(question);
                        break;
                    case 3:
                        category3Questions.add(question);
                        break;
                    case 4:
                        category4Questions.add(question);
                        break;
                    default:
                        System.out.println("未知分类:" + category);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (NumberFormatException e) {
            System.out.println("分类编号格式错误");
            e.printStackTrace();
        }
    }

    // 根据用户选择的分类,返回10道随机问题
    public ArrayList<Question> getRandomQuestions(int category) {
        ArrayList<Question> targetList = null;
        switch (category) {
            case 1:
                targetList = category1Questions;
                break;
            case 2:
                targetList = category2Questions;
                break;
            case 3:
                targetList = category3Questions;
                break;
            case 4:
                targetList = category4Questions;
                break;
            default:
                System.out.println("无效分类");
                return new ArrayList<>();
        }

        // 打乱列表后取前10个(不足10个则取全部)
        ArrayList<Question> randomQuestions = new ArrayList<>(targetList);
        Collections.shuffle(randomQuestions);
        int takeCount = Math.min(10, randomQuestions.size());
        return new ArrayList<>(randomQuestions.subList(0, takeCount));
    }
}

第四步:使用示例

在主程序里你可以这么调用:

public class Main {
    public static void main(String[] args) {
        Questions questionBank = new Questions();
        // 加载文本文件里的问题
        questionBank.loadQuestionsFromFile("questions.txt");

        // 假设用户选择了分类2
        ArrayList<Question> selectedQuestions = questionBank.getRandomQuestions(2);
        // 遍历展示问题,添加用户答题逻辑
        for (Question q : selectedQuestions) {
            System.out.println("问题:" + q.getContent());
            // 这里可以加用户输入答案、判断对错的代码
        }
    }
}

一些小提示

  • 文本文件路径要确保正确,和项目根目录同级别直接写文件名即可,其他位置写绝对路径。
  • 如果担心分隔符冲突,可以换用更特殊的符号(比如###),只要问题内容里不会出现就行。
  • 如果某类问题不足10道,代码会自动取全部,你可以根据需求调整(比如提示用户该类问题数量不足)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:31:48