用Java打印排序数组

时间:2016-09-07 10:28:51

标签: java

代码的作用基本上是要求您排序的元素数量,元素和打印它们的排序。或者至少它应该。当我运行它时会这样做:

enter image description here

我该怎么办?我正在使用 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));
    }
}

4 个答案:

答案 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)

需要注意两件事情才能理解代码无效的原因。

  1. 在创建时使用默认值初始化数组。
  2. 对sort的调用放在for循环中,每次执行排序。
  3. <强>解释

    每当提供“元素数量”= 2时,元素将被读取为位置元素[0]并且在调用sort语句时,它将被放置在位置元素[1]中。然后,在下一次迭代中,读取元素并将其放置在位置元素[1]处,覆盖该位置处的值。因此,您始终使用零和第二个输入数字,并且元素数量= 2。

    类似的情况会发生在两个以上的元素上,其中一个或多个元素可能会被覆盖。