Java从文本文件中提取随机值

时间:2011-03-17 00:10:31

标签: java random

我之前发布了question关于如何使用Java从外部文本文件中提取前八个值的问题。文本文件包含前1000个素数,我编写了一个从所述文本文件中读取数据的方法。

我想知道如何随机提取8个值 并将结果应用于其他方法。

有些事情:

read data from file;
select eight random numbers from file;
apply random numbers to method;

我能够提取前八个数字(正如我前一个问题的一些答案所解释的那样),但我现在想要提取八个随机值 - 我该怎么做?

谢谢。

3 个答案:

答案 0 :(得分:4)

Collect数字。

List<Long> numbers = new ArrayList<Long>();
// ...
while ((line = reader.readLine()) != null) {
    numbers.add(Long.valueOf(number));
}

Shuffle列表。

Collections.shuffle(numbers);

Grab前八个。

List<Long> eightRandomNumbers = numbers.subList(0, 8);

传递它。

someMethod(eightRandomNumbers);

答案 1 :(得分:4)

另一种方式是:

List<Long> numbers = new ArrayList<Long>();
//here you create reader from your file
while ((line = reader.readLine()) != null) {
    numbers.add(Long.valueOf(number));
}

Long[] selectedNumbers = new Long[8]();
Random r = new Random();
for(int i = 0; i < selectedNumbers.length; i++){
    selectedNumbers[i] = numbers.get(r.nextInt(numbers.Size()));
}
//8 random numbers are in selectedNumbers array

这个解决方案的优势在于它比BalusC的答案更有效。你当然可以用List替换数组

答案 2 :(得分:0)

您不需要将所有数字添加到内部列表中,但是使用1000个数字并不重要。基本上你做的是:

  • 构造一个随机的意义
  • 对于文件中的每一行,计算“需要”该数字的百分比机会(作为0和1之间的双倍)(实际上,仍需要的项目数除以文件中仍留有的项目数);
  • 调用nextDouble()om随机实例:如果该双倍小于您计算的百分比,则将该数字添加到列表中;
  • 如果您随后需要所选的数字是随机顺序,请在您选择的数字列表中调用Collections.shuffle(),如某些答案中所示。

如果有任何帮助,我之前就使用示例代码编写了一篇关于此主题的文章:请参阅how to pick a random sample from a list