在不使用 Java 中的内置排序方法的情况下对用户输入进行动态排序
Posted
技术标签:
【中文标题】在不使用 Java 中的内置排序方法的情况下对用户输入进行动态排序【英文标题】:Sorting user input dynamically without using inbuilt sorting methods in 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 < num
为假,循环将在一次迭代后结束。 num = i;
应该被删除。 num
是 5,您想从输入中读取 5 个数字。
如果您的意图是在每次“找到”一个新数字时更改数组的大小,那么仅仅更改 num
是无法实现的。
@RudyVelthuis 数组大小应该是动态的。我输入了 5,因为否则我无法让它工作
查看我之前的评论。这不是改变数组大小的方法。什么时候停止读取输入?
【参考方案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 行。
【讨论】:
以上是关于在不使用 Java 中的内置排序方法的情况下对用户输入进行动态排序的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用Assembler循环的情况下对3个变量进行排序?
pd.dataframe - 在不更改索引的情况下对列表列中的每个列表进行排序