【问题标题】:Sorting user input dynamically without using inbuilt sorting methods in Java在不使用 Java 中的内置排序方法的情况下对用户输入进行动态排序
【发布时间】:2016-11-14 00:27:04
【问题描述】:

我正在尝试对一些用空格分隔的用户输入的整数进行排序。

输入:4 2 1 5 9 -- 预期输出:1 2 4 5 9

用户在 i

 class javasort {
    public static void main(String[] args) {
    int num, i, j, temp;
    Scanner input = new Scanner(System.in);

    // System.out.println("Enter the number of integers to sort:");
    // num = input.nextInt();

    num = 5; // <-- the user input should be dynamic

    int array[] = new int[num];

    System.out.println("Enter integers: ");

    for (i = 0; i < num; i++)

        array[i] = Integer.parseInt(input.next());
        num = i; // make array as big as input ?

    for (i = 0; i < (num - 1); i++) {
        for (j = 0; j < num - i - 1; j++) {
            if (array[j] > array[j + 1]) {
                temp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = temp;
            }
        }
    }

    System.out.println("Sorted list of integers:");

    for (i = 0; i < num; i++)
        System.out.println(array[i]);
}}

【问题讨论】:

  • 您缺少一对花括号。第一个循环的主体由一个且只有一个语句组成。建议:总是在 if 语句和循环体中使用花括号。
  • 如果这是预期的循环,那么它是可疑的。如果num = i;,则i == num,所以i &lt; num 为假,循环将在一次迭代后结束。 num = i; 应该被删除。 num 是 5,您想从输入中读取 5 个数字。
  • 如果您的意图是在每次“找到”一个新数字时更改数组的大小,那么仅仅更改 num 是无法实现的。
  • @RudyVelthuis 数组大小应该是动态的。我输入了 5,因为否则我无法让它工作
  • 查看我之前的评论。这不是改变数组大小的方法。什么时候停止读取输入?

标签: java sorting for-loop bubble-sort


【解决方案1】:

您的代码几乎是正确的,然后您删除了您拥有的最佳提示。用Scanner.nextInt()点赞

num = input.nextInt();          // <-- get the count.
int array[] = new int[num];
System.out.println("Enter integers: ");
for (i = 0; i < num; i++) {     // <-- don't rely on indentation for flow control.
    array[i] = input.nextInt(); // <-- get a number "num" times.
}

【讨论】:

  • 我明白了。但我希望输入和输出是这样的 Input: 4 2 1 5 9 -- Expected output: 1 2 4 5 9 而不必在每个数字后按回车键。
  • 第一个输入必须是您的数字计数。所以,5 4 2 1 5 9 应该这样做。
  • 是的,我知道。但我正在寻找一个动态数组。用户不必指定需要输入的长度。此修复不适用于 5 4 或 55 77 11
  • Java 数组有固定长度,你可以使用Collection;或者您必须复制数组以添加新元素。此外,您将需要某种方式来指示输入已完成。您不使用内置方法的要求将使这非常变得困难。祝你好运!
【解决方案2】:

如此简单,却如此高效:

Arrays.sort(array);

【讨论】:

  • 我不能使用 Arrays.sort。这就是我不使用内置库的意思
  • 猜猜看:Scanner、System 和 Integer 是内置库
【解决方案3】:

您可以使用Bubble sort 算法。它在最坏的情况下运行 o(n^2)。不必把代码放在这里,你可以做到。它只需要不到 20 行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2017-05-07
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多