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

时间:2014-12-31 17:40:49

标签: 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() && counter < 10)
{
    System.out.println(read);
    counter++;
}

该文件包含1到100个数字;

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

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

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

4 个答案:

答案 0 :(得分:0)

您可以将它们放入List,然后使用Collections.shuffle方法。

答案 1 :(得分:0)

将您的号码读入arrayjava.util.Random以访问您的阵列并按照您的意愿进行打印(使用嵌套循环进行打印&#39; x&#39;每次访问次数) 。如果您只想随机打印,可以使用Collections.shuffle进行随机播放,然后只需遍历结构并进行打印。

答案 2 :(得分:0)

好吧,如果您的文件足够小,使用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

答案 3 :(得分:0)

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

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();
}