java中如何从文件中随机读取N行数
我对java相当陌生,所以如果我做错了什么,请容忍我。我已经用java编写了一个代码,它从java中的一个文件中读取N行,并将其放入double数组中,然后打印出来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
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();
}