2014-11-23 54 views
0

我是新來的Java和stackoverflow。我有一個文本文件,我希望我的Java程序可以讀取,然後選擇一個隨機行並顯示它。我發現的只是演示字節和字符。我如何使用字符串或只是一行?我很抱歉,這個問題之前已經被問到過,但其他帖子並沒有幫助我。我很茫然,我覺得這有一個簡單的解決方案。如何顯示文本文件中的隨機行?

這是我到目前爲止有:

package Nickname; 

import java.util.Scanner; 
import java.io.*; 

public class Nickname { 

    public static void main(String[] args) throws IOException { 

     RandomAccessFile randomFile = new RandomAccessFile("names.txt", "r"); 

    } 

} 

回答

0

我建議你使用一個緩衝的讀者。通過in.readLine(),您可以從文件中獲得下一行。

Math.random()生成一個介於0和1之間的(僞)隨機數。通過乘法和轉換爲int,可以生成一個介於0和100之間的數字。如果該隨機數碰巧是一個特定值(本例中爲50)停止您的循環並打印行。

您可以通過將倍增因子更改爲您喜歡的任何值來更改循環中斷的機率。只要確保與指定範圍內的數字進行比較。

BufferedReader in = new BufferedReader(new FileReader(file)); 

while (in.ready()) { 

    String s = in.readLine(); 

    //1% chance to trigger, if it is never triggered by chance you will display the last line 
    if (((int)(Math.random*100)) == 50) 
    break; 

} 
in.close(); 
System.out.println(s); 

或者像這樣的解決方案可能是更優雅,讓您獲得任一值的均勻分佈的機會:

BufferedReader in = new BufferedReader(new FileReader(file)); 
List<String> myNicknames = new ArrayList<String>(); 
String line; 

while ((line = in.readLine()) != null) { 
    myNicknames.add(line); 
} 
in.close(); 

System.out.println(myNicknames.get((int)(Math.random() * myNicknames.size()))); 
+0

你可能是正確的那一個。與null相比肯定會起作用,所以我會用它來保證安全。 – nitowa 2014-11-23 22:32:54

+0

隨機想法:在這種情況下使用ArrayList不是最有效的實現。由於您添加了多次,但只獲得一次,LinkedList速度要快很多。 (1),獲得O(n) – nitowa 2014-11-23 22:43:32

+0

我需要文本文件中的每一行都有相等的機會存在閱讀其他行。這兩種策略中的哪一種會更好地發揮作用? – shottyrockets 2014-11-24 17:24:25