2015-11-01 70 views
-4

我需要在文本文件中读取未知数量的问题。格式总是相同的,但选项的数量不是。我用for循环来处理这个问题。while while while while for text file not functioning

如果我删除了这段时间,代码成功获取其中一个问题并存储它,但我需要它循环。代码甚至不会用循环进行编译。我尝试了很多修复,但它不会编译。

任何意见非常感谢!

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(); 
+3

如果不编译请提供编译器错误。 – Kai

+1

请使用该循环提供您正在阅读的文件。 – Kai

+0

感谢所有回复并给出建议的人。 – Ashitaka

回答

0

在你的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 
     } 
    } 


} 
+0

这正是我所需要的,我知道我的主要格式是正确的,但循环参数看起来很时髦。谢谢你,伙计。 – Ashitaka

0

我建议你做一个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; 
+0

感谢您的快速回复!但是这会抛出一个编译错误...线程“main”中的异常java.lang.NumberFormatException:对于输入字符串:“” \t at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) \t at java.lang .Integer.parseInt(Integer.java:592) \t在java.lang.Integer.parseInt(Integer.java:615) \t在assign3.Assign3.main(Assign3.java:46) Java结果:1 – Ashitaka

+0

的当然它。在这段代码中,我们尝试将EVERY行投射到“Int”。这将无法正常工作。我需要查看你的文件才能使'Integer.parseInt'以正确的顺序。 – Kai

+0

我的意思是它编译好没有循环包围它。我之前用我的初始代码尝试了while循环,并抛出了相同的错误:/ – Ashitaka