java中如何从文件中随机读取N行数

java中如何从文件中随机读取N行数,java,file,bufferedreader,line-numbers,Java,File,Bufferedreader,Line Numbers,我对java相当陌生,所以如果我做错了什么,请容忍我。我已经用java编写了一个代码,它从java中的一个文件中读取N行,并将其放入double数组中,然后打印出来 ArrayList<Double> numbers = new ArrayList<Double>(); Scanner read = new Scanner(new File("numberfile")); int counter = 0; while(read.hasNextLine() &&am

我对java相当陌生,所以如果我做错了什么,请容忍我。我已经用java编写了一个代码,它从java中的一个文件中读取N行,并将其放入double数组中,然后打印出来

ArrayList<Double> numbers = new ArrayList<Double>();
Scanner read = new Scanner(new File("numberfile"));
int counter = 0;
while(read.hasNextLine() && counter < 10)
{
    System.out.println(read);
    counter++;
}
ArrayList number=new ArrayList();
扫描仪读取=新扫描仪(新文件(“数字文件”);
int计数器=0;
while(read.hasNextLine()&计数器<10)
{
系统输出打印项次(读取);
计数器++;
}
该文件包含一组从1到100的数字

目前,如果我告诉代码读取前10个数字,那么我的代码会打印出所有像这样的数字[1,2,3,4,5,6,7,8,9,10]。我现在想做的是以随机顺序打印这些数字,例如[2,1,6,8,9,3,7,10,3,5]

如果可能的话,我想写一个代码,随机N次打印出前10个数字。例如,以随机顺序将前10个数字打印50次


谢谢您的帮助,如果我不清楚,请告诉我。

您可以将它们放入
列表中,然后使用方法

将数字读入
数组
,然后访问数组并按需要打印(使用嵌套循环每次访问打印“x”次)。如果您只想随机打印,可以使用洗牌,然后简单地遍历结构并打印。

如果您的文件足够小,使用Java 7很容易:

final Path thefile = Paths.get("whereyourfileis");

final List<String> lines = Files.readAllLines(thefile, StandardCharsets.UTF_8);

Collections.shuffle(lines);

// lines.sublist(0, 10) --> done
final Path thefile=Path.get(“whereyourfileis”);
最终列表行=Files.readAllLines(文件,StandardCharsets.UTF_8);
集合。洗牌(行);
//行。子列表(0,10)-->完成

您应该在将文件读入数组(或列表)时存储数字,然后A)将数组洗牌并打印出来,或者B)从数组中随机选择数字。如果您不关心重复的数字(例如,[2,1,6,1,1,1,2]),您可以使用Math.random()随机选取10项。否则,读入如下列表(您已经有一个名为numbers的ArrayList):

while(read.hasNextLine()&&counter<10)
{
add(read.nextDouble());
计数器++;
}
对于(int n=0;n<50;n++){
收藏。洗牌(数字);
对于(int i=0;i
我建议您查看集合(例如,
ArrayList
)和
collections.shuffle
。对于随机输出,您应该看到答案,如果不适合,只需查找“java ArrayList shuffle”或“java ArrayList randomisze”。对于其他人,您可以存储它,为什么不添加一个额外的变量,在while之后,使用该变量多次打印
数字
列表?我设法使用Collection.shuffle将其随机打印出来。现在可以将前10个数字以随机顺序打印50次吗?不相关,您可以将
while
循环替换为
for
循环,替换为:
for(int counter=0;read.hasNextLine()&&counter<10;counter++)
我设法使用Collection.shuffle随机打印出来。现在是否可以让它以随机顺序打印出前10个数字,比如50次?是的,这就是外部
for
循环的目的。只需将NUM_SHUFFLES与50重新组合即可。添加一个额外的System.out.println();就在最后一个
}
之前。我编辑了我的帖子来反映它。您现在应该可以看到它们组合在一起了。如果需要不同的格式,则可以将内部println更改为
System.out.print(numbers.get(i)+”)或类似的。嗨,对不起,它仍然不工作。现在它一直打印15个数字,而且不是随机的。我只是更新了我的答案(它有一些打字错误),并用一个数字文件进行了测试,它似乎工作得很好。你应该可以复制和粘贴整个内容。我设法使用Collection.shuffle随机打印出来。现在有没有可能让它以随机顺序打印出前10个数字,比如50次?对不起,我完全不明白你的意思?基本上,以随机顺序阅读前10个数字,比如50次。例如,前10个数字是1、2、3、4、5、6、7、8、9、10。我想把这些数字按随机顺序读50遍,例如1、4、8、10、3、1、4、5、7、3、10、10、3、5、6。。。。。5、6、2、1我设法使用Collection.shuffle随机打印出来。现在有没有可能让它以随机顺序打印出前10个数字,比如50次?
while(read.hasNextLine() && counter < 10)
{
    numbers.add(read.nextDouble());
    counter++;
}
for (int n = 0; n < 50; n++) {
    Collections.shuffle(numbers);
    for (int i = 0; i < numbers.size(); i++) {
        System.out.println(numbers.get(i));
    }
    System.out.println();
}