为什么数组没有在下面的java代码中排序?

时间:2014-06-04 08:39:55

标签: java

当我运行代码时,数组p没有排序。我想不出来

为什么会这样?

import java.util.Arrays;

public class Main {

    public static void main (String[] args){

        //creating array p
        int[] p= new int[] {2,7,8,3,9,1,4,5,6,0 };

        //sort p[5] to p[9]
        Arrays.sort(p, 5, 9);
        for(int l=0;l<p.length;l++)
        {
            System.out.print(p[l]);
        }

    }
}

输出为:2783914560

3 个答案:

答案 0 :(得分:5)

您具体要求对上限中的p [5]到p [9] 独占的部分进行排序...所以4个元素已经按顺序排列(1 ,4,5,6)。

如果要排序为p [9] 包含,则应调用

Arrays.sort(p, 5, 10);

来自documentation

  

toIndex - 要排序的最后一个元素的索引

当然,它仍然不会对整个数组进行排序 - 只是它的最后一部分,所以你最终会得到{2,7,8,3, 9,0,1,4,5,6}。要对整个数组进行排序,只需调用Arrays.sort(p)

请注意,使用包含下限和独占上限指定范围的模式在计算中是非常常见,您应该习惯它。另一个常见示例是String.substring

String text = "0123456789";
String substring = text.substring(0, 5); // 01234

答案 1 :(得分:0)

因为您没有对整个阵列进行排序。在这一行:

Arrays.sort(p, 5, 9);

您只是从第5到第9位对数组进行排序。使用可以改为使用:

Arrays.sort(p, 0, p.length);

通过这种方式,您确定要将整个数组从第一个位置(索引零)排序到最后一个位置(最后一个参数表示最后一个独占索引)。

但它更容易使用:

Arrays.sort(p);

如上所述自动对整个数组进行排序。

答案 2 :(得分:0)

来自Arrays.sort()

的java文档
  

要排序的范围从索引fromIndex(包括)扩展到   index toIndex,exclusive。

我认为您希望在排序中包含index 9。在这种情况下,您需要传递p.length (that is 10) instead of 9