我有一个包含50行的文件,每行只包含一个单词,我有以下类从文件中读取随机行
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;
}
}
问题在于,由于某种原因,该类永远不会返回位于前5-10行之后的任何内容,只是不断返回第一行,是否有任何可能导致此问题的想法?
先谢谢!
答案 0 :(得分:2)
你的循环在每次迭代时调用numberGenerator()
。这意味着,不是从1到50中选择一个随机数,而是每次循环都会绘制一个新的随机数。
当你经历5次或10次迭代时,你可能会得到一个小于i的随机数。
在修复此问题时,请将new Random()
实例移到该方法之外。您只需要一个随机数生成器,您可以继续调用nextInt()
。你每次都在不必要地创建一个新对象。