Math.random and FileReader



我正在尝试制作一个从文件中随机获取一行的程序,我已经完成了我的代码,但我得到了奇怪的结果,例如,如果我得到第 0 行,它说"null"与第 6、7、8、9 行相同......但是当我得到数字 5 时,我得到最后一行(粉红色),当我得到数字 4 时,我得到第 7 行(棕色), 2号线3(海军)等等。我的文件"archivo.txt"有10行,如下所示:

  • 海军
  • 石灰
  • 绿
  • 橄榄
  • 棕色
  • 黄色
  • 粉红色

这是我的代码:

    public static String getLinea(){
    File archivo = null;
    FileReader fr = null;
    BufferedReader br = null;
    String linea = null;
    int numeroRandom = (int)(Math.random() * 10);
    System.out.println(numeroRandom);
    try{
        archivo = new File("C:\archivo.txt");
        fr = new FileReader (archivo);
        br = new BufferedReader(fr);
        for(int i = 0; i < numeroRandom; i++){
            br.readLine();
            linea = br.readLine();
        }
    }
    catch(Exception e){
        e.printStackTrace();    
    }finally{
        try{
            if(null != fr){
                fr.close();
            }
        }catch(Exception e2){
            e2.printStackTrace();
        }
    }
    return linea;
}
 public static void main(String[] args){
     String linea;
     linea = getLinea();
     System.out.println(linea);
 }

您正在尝试按顺序从缓冲区读取两次。

 for(int i = 0; i < numeroRandom; i++){
        br.readLine();
        linea = br.readLine();
    }

而是只读一次。正确方法:

for(int i = 0; i < numeroRandom; i++){
        linea = br.readLine();
    }

此外,在从缓冲读取器读取之前,您应该检查 BufferedReader 是否还有更多数据。这可以按如下方式完成:

while(((linea = br.readLine()) != null) &&  i < numeroRandom)
{
   // do something
}

你在循环中调用 readLine() 两次,有效地使你跳过的行数翻了一番。

我假设您只想阅读第 n 行,跳过前面的行。然后你应该更新这段代码:

    br = new BufferedReader(fr);
    for(int i = 0; i < numeroRandom; i++){
        br.readLine();
        linea = br.readLine();
    }

进入这个:

    br = new BufferedReader(fr);
    for(int i = 0; i < numeroRandom; i++){
        br.readLine();
    }
    linea = br.readLine(); // move this line

numeroRandom为 0 时,您会null,因为linea没有更新。其他奇怪的结果是因为您在每个周期中读取 2 行。在某一点上,getLine()将简单地返回 null,因为没有更多要读取的行。

最新更新