代码的作用基本上是要求您排序的元素数量,元素和打印它们的排序。或者至少它应该。当我运行它时会这样做:
我该怎么办?我正在使用 JDK 7 和 IntelliJ IDEA 15 。
是的,我确实谷歌了,我找不到任何东西。不,我不想要代码,我想要意见。
import java.text.MessageFormat;
import java.util.Scanner;
public class bb {
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.print("Enter number of elements:");
int numberOfElements = scan.nextInt();
System.out.print(MessageFormat.format("Enter {0} {1} ",numberOfElements,"numbers: "));
int [] elements = new int[numberOfElements];
for (int i = 0; i < elements.length; i++) {
elements[i]=scan.nextInt();
java.util.Arrays.sort(elements);
}
System.out.println(java.util.Arrays.toString(elements));
}
}
答案 0 :(得分:2)
在循环中进行排序会将elements
中的默认值(0)视为另一个值。因此,在排序之后,数组中的最小值将为0,这不应该是。
解决方案,执行sorting
外部循环。
for (int i = 0; i < elements.length; i++) {
elements[i]=scan.nextInt();
}
java.util.Arrays.sort(elements);
答案 1 :(得分:2)
每次发生循环时你都会对列表进行排序,这是不必要的,而你应该使用:
for (int i = 0; i < elements.length; i++) {
elements[i]=scan.nextInt();
}
java.util.Arrays.sort(elements);
每次在循环中运行java.util.Arrays.sort(elements);
,你基本上都说你想在每次输入数字时对elements
进行排序,这就是:
Enter number of elements:2
Enter 2 numbers: 3
sort being called on[0, 3]
1
sort being called on[0, 1]
[0, 1]
0
的原因是,当您使用int
个数量的n
数组进行初始化时,您就拥有了这个数据:
int[] x = new int[3]; // this is making [0,0,0]
因此,当您在添加一个元素2
- &gt;之后尝试对其进行排序时Arrays.sort([2,0,0])
您将获得[0,0,2]
,因此会导致问题。
答案 2 :(得分:2)
Issue i see is You are sorting array even when your still getting input from user.
e.g.
You initialized array to size 3 [0,0,0]
in first loop user provides 4 [4,0,0] after sort [0,0,4]
in Second loop user provides 7 [0,7,4] after sort [0,4,7]
in third loop user provides 1 [0,4,1] after sort [0,1,4]
here your value is getting overwritten.
write sort function after you finish getting input from user.
答案 3 :(得分:0)
需要注意两件事情才能理解代码无效的原因。
<强>解释强>
每当提供“元素数量”= 2时,元素将被读取为位置元素[0]并且在调用sort语句时,它将被放置在位置元素[1]中。然后,在下一次迭代中,读取元素并将其放置在位置元素[1]处,覆盖该位置处的值。因此,您始终使用零和第二个输入数字,并且元素数量= 2。
类似的情况会发生在两个以上的元素上,其中一个或多个元素可能会被覆盖。