2015-11-01 71 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