【问题标题】:Generating millions of random integers to give as input to a Java program生成数百万个随机整数作为 Java 程序的输入
【发布时间】:2018-02-02 17:11:37
【问题描述】:

我用 Java 编写了一些排序算法,并验证了它们对于小输入的正确性。现在,我想检查它们之间的表现,因为需要排序的元素数量达到数百万。

所以我一直在寻找沿途的东西:

  1. 运行排序算法

  2. 询问用户想要排序的元素数量(我可能输入 > 100 万)

  3. 通过随机整数生成给出输入大小的输入。

我想知道如何实现第三步,而不必自己重写排序算法。我正在使用 LINUX 终端来运行我的代码。

谢谢!

【问题讨论】:

  • 到目前为止您尝试了什么,您的问题是什么?
  • 我写了一个可以为我生成随机整数的脚本。我没有得到的是如何将此脚本的输出作为排序算法脚本的输入。
  • 如果我们对您的代码一无所知,我们如何建议如何从您的脚本中传递值?你的算法的实现在哪里?生成输入的脚本在哪里?
  • 这是否意味着该脚本不是 Java 语言?为什么?
  • 这是我要做的:从here 获取随机数,每行一个,然后使用BufferedReaderLineNumberReader 读取所需的整数行数。

标签: java algorithm sorting terminal


【解决方案1】:

有一种相当简单的方法将 linux 脚本的输出链接到 java 程序的输入。以下方法应该适合您

echo N | ./createInput.sh | java -cp "/srcpath/" packagePath/YourInputToAlgorithm

地点:

  1. N 是要排序的元素数
  2. createInput.sh 是 linux 数字生成器(必须接受 $1 作为元素数)
  3. YourInputToAlgorithm 是 Java 代码,它使用 Scanner 读取值,然后对输入执行排序算法

这里有非常简单的实现来说明该方法:

Linux 生成器:

#!/bin/bash
# Read the number of elements 
read NUMBER_ELEMENTS
# Must echo it to Java program
echo $NUMBER_ELEMENTS
# This implementation just creates number 1..NUMBER_ELEMENTS in reverse order
until [  $NUMBER_ELEMENTS-lt 1 ]; do
    echo $NUMBER_ELEMENTS
    let NUMBER_ELEMENTS-=1
done

Java 代码:

public class ReadStdIn {

public static void main(String[] args) {
    List<Integer> input = new ArrayList<Integer>();
    Scanner s = new Scanner(System.in);
    int numberElements = s.nextInt();
    while (numberElements > 0) {
        input.add(s.nextInt());
        numberElements--;
    }
    s.close();
    Collections.sort(input);   // Here you would call your algorithm
    System.out.println(input);
}
}

一个例子:

echo 5 | ./createInput.sh | java -cp "/src/" stackoverflow/ReadStdIn 

按预期创建输出:

[1, 2, 3, 4, 5]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2021-01-27
    • 2015-01-28
    • 2011-12-20
    • 2021-09-03
    • 2011-03-19
    相关资源
    最近更新 更多