2016-05-24 2 views
-1

ich eine Datei mit 50 Zeilen haben, jede Zeile nur ein Wort enthält, und ich habe die folgende Klasse eine zufällige Zeile aus der DateiBufferedReader nicht vollständig Lesen einer Datei

public class WordGenerator{ 
    static Random generator; 

    static int numberGenerator(){ 
     generator = new Random(); 
     return generator.nextInt(50)+1; 
    } 

    static String wordSelector(){ 
     String word = null; 
     FileInputStream fis = null; 
     BufferedReader br = null; 
     String temp = String.format("..%sutil%s", File.separator, File.separator); 

     try{ 
      fis= new FileInputStream(temp + "Words.txt"); 
      br = new BufferedReader(new InputStreamReader(fis)); 
     }catch(FileNotFoundException ex){ 
      System.out.println("File not found: " + ex); 
     } 


     try{ 
      for(int i = 0; i < numberGenerator(); ++i){ 
       word = br.readLine(); 
      } 
     }catch(IOException e){ 
      System.out.println("Error in line reading: " + e); 
     } 

     System.out.println(word); 

     return word; 
    } 
} 

Das Problem ist zu lesen, dass für Aus irgendeinem Grund gibt die Klasse niemals etwas zurück, das nach den ersten 5-10 Zeilen liegt und nur die ersten zurückgibt, irgendeine Idee, was das verursachen könnte?

Vielen Dank im Voraus!

Antwort

2

Ihre Schleife ruft bei jeder Iteration numberGenerator() auf. Das bedeutet, dass Sie nicht eine einzelne Zufallszahl von 1 bis 50 auswählen, sondern jedes Mal eine neue, durch die Schleife ziehen.

Wenn Sie 5 oder 10 Iterationen durchlaufen haben, ist es wahrscheinlich, dass Sie eine Zufallszahl weniger als i gezogen haben.

Während Sie das beheben, verschieben Sie die new Random() Instanziierung außerhalb dieser Methode. Sie benötigen nur einen Zufallszahlengenerator, und Sie können weiterhin nextInt() darauf aufrufen. Du erschaffst unnötig jedes Mal ein neues Objekt.

+0

Omg, ich kann nicht glauben, dass ich das beaufsichtigte, vielen Dank für die Hilfe! – gabevt