如何输入n个数字并按升序打印而不使用数组

时间:2016-08-03 15:13:38

标签: java arrays algorithm

我正在尝试创建一个程序,它在循环中接收n个输入,并能够按升序显示输出。程序的主题是它不应该使用数组。

我通过创建一个接受输入的程序来尝试它,然后显示最小的数字,然后是第二个最小的和第三个最小的,依此类推。但我是编程的新手,所以我的程序只能做到最小,而且不起作用。

我还在一个类似的问题中看到了堆数据结构,但是如果没有数组,它就无法弄清楚它是如何工作的。

请帮助我如何使用堆数据结构或给我一个很好的建议。

3 个答案:

答案 0 :(得分:1)

List<Integer> list = new LinkedList<Integer>();
Scanner scanner = new Scanner(System.in);

while (true) {
    System.out.print("Enter a number, -1 to exit: ");
    int num = scanner.nextInt();

    if (num == -1) break;

    list.add(num);
}

// sort the list (ascending)
Collections.sort(list);

// output the list
for (Integer val : list) {
    System.out.println(val);
}

答案 1 :(得分:1)

您可以使用Streams:

    StreamSupport.stream(
            Spliterators.spliteratorUnknownSize(new Scanner(System.in), Spliterator.ORDERED),
            false)
            .limit(10)
            .sorted()
            .forEach(System.out::println);

答案 2 :(得分:0)

使用SortedSet进行默认排序,不重复。 (如果这里需要重复,请不要!)

    SortedSet<Integer> sortedSet = new TreeSet<Integer>();
    Scanner scanner = new Scanner(System.in);

    while (true) {
        System.out.print("Enter a number, -1 to exit: ");
        int num = scanner.nextInt();
        if (num == -1) 
            break;
        sortedSet.add(num);
    }
    System.out.println(sortedSet);