我之前发布了question关于如何使用Java从外部文本文件中提取前八个值的问题。文本文件包含前1000个素数,我编写了一个从所述文本文件中读取数据的方法。
我想知道如何随机提取8个值 并将结果应用于其他方法。
有些事情:
read data from file;
select eight random numbers from file;
apply random numbers to method;
我能够提取前八个数字(正如我前一个问题的一些答案所解释的那样),但我现在想要提取八个随机值 - 我该怎么做?
谢谢。
答案 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个数字并不重要。基本上你做的是:
如果有任何帮助,我之前就使用示例代码编写了一篇关于此主题的文章:请参阅how to pick a random sample from a list。