为文本文件做 while 循环不起作用

do while loop for text file not functioning

我需要阅读一个包含未知问题数量的文本文件。格式始终相同,但选项数量不同。我已经用 for 循环解决了这个问题。

如果我删除 do while,代码会成功获取其中一个问题并存储它,但我需要它循环。代码甚至不会用循环编译。我尝试了很多修复,但它根本无法编译。

非常感谢任何建议!

FileReader fileReader = new FileReader(f);

        BufferedReader bufferedReader =
        new BufferedReader(fileReader);

        String line;

            do {
                line = bufferedReader.readLine();
                String question = line;

                line = bufferedReader.readLine();
                int numoptions = Integer.parseInt(line);

                ArrayList<String> options = new ArrayList<>();
                for (int i = 0; i < numoptions; i++){
                    line = bufferedReader.readLine();
                    String choice = line;
                    options.add(choice);
                }

                line = bufferedReader.readLine();
                int answer = Integer.parseInt(line);

                line = bufferedReader.readLine();
                int tries = Integer.parseInt(line);

                line = bufferedReader.readLine();
                int wins = Integer.parseInt(line);           

                Question objQ = new Question(question, numoptions, options,            answer, tries, wins); 
                mainlist.add(objQ);

            }   
            while (bufferedReader.readLine() != null);

                bufferedReader.close();

我建议你做一个 while loop 而不是 do ... while。那么你不应该在循环中进行多次 readLine 调用。首先,我会这样做。我知道这不是最终的,因为我不知道你的文件是什么样的。

String line = null;  
while ((line = bufferedReader.readLine()) != null) {
       String question = line;
       int numoptions = Integer.parseInt(line);

       ArrayList<String> options = new ArrayList<>();
       for (int i = 0; i < numoptions; i++) {
            String choice = line;
            options.add(choice);
       }

       int answer = Integer.parseInt(line);
       int tries = Integer.parseInt(line);
       int wins = Integer.parseInt(line);           

       Question objQ = new Question(question, numoptions, options,  answer, tries, wins); 
       mainlist.add(objQ);
}
bufferedReader.close();

在查看文件后,我可能会这样做。我想你现在可以自己完成了:

int i = 0;
while ((line = bufferedReader.readLine()) != null) {
    i++;
    switch(i)
    {
       case 1: String question = line;
        break;

       case 2:
        int numoptions = Integer.parseInt(line);
        ArrayList<String> options = new ArrayList<>();
        for (int i = 0; i < numoptions; i++) {
                String choice = line;
                options.add(choice);
        }
        break;

在您的 while 语句中,您执行了一个 bufferedReader.readLine(),您不使用其中的结果。这可能不是您想要做的。

请查看下面的代码,它应该编译并读取您的问题文本文件(假设这是每行一个整数)。

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


public class ReadQuestions {

    static ArrayList<Question> mainlist = new ArrayList<>();


    static void readFile(File f) throws IOException {
        FileReader fileReader = new FileReader(f);

        BufferedReader bufferedReader =
                new BufferedReader(fileReader);

        String line;


        while(true) {

            line = bufferedReader.readLine();
            if(line == null)
                break;
            System.out.println(line);
            String question = line;

            line = bufferedReader.readLine();
            int numoptions = Integer.parseInt(line);

            ArrayList<String> options = new ArrayList<>();
            for (int i = 0; i < numoptions; i++) {
                line = bufferedReader.readLine();
                String choice = line;
                options.add(choice);
            }

            line = bufferedReader.readLine();
            int answer = Integer.parseInt(line);

            line = bufferedReader.readLine();
            int tries = Integer.parseInt(line);

            line = bufferedReader.readLine();
            int wins = Integer.parseInt(line);


            Question objQ = new Question(question, numoptions, options,            answer, tries, wins);
            mainlist.add(objQ);
        }
        bufferedReader.close();
    }

    public static void main(String []arg) throws IOException {
        File f = new File("questions.txt");
        readFile(f);
    }


    public static class Question {
        public Question(String question, int numoptions, ArrayList<String> options, int answer, int tries, int wins) {
            // tbc
        }
    }


}