簡體   English   中英

數組排序降序

[英]Array Sorting Descending Order

我是java的新程序員,一直在使用這個網站來學習方法。 今天我偶然發現了另一個問題,即我正在為練習做的一個項目。

我有一個數組:

    final int EXAMS = 5;
    int[] scores = new int [EXAMS];

然后,用戶通過Scanner對象詢問此數組的值:

for (int index = 0; index < EXAMS; index++)
    {
        System.out.println("Enter the score for " + (index+1) +":");
        scores[index] = kb.nextInt();
        if (scores[index] < 0){
            System.out.println("The number you have entered is invalid.");
            scores[index] = kb.nextInt();
        }
    }

我設法對值“scores []”進行升序排序:

       Arrays.sort(scores);
        System.out.println("The sorted int array is:");
        for (int number : scores) 
        {
            System.out.println("Number = "+ number);
        }

但我希望排序按降序排列。 當我把

Arrays.sort(scores, Collections.reverseOrder());

我收到一條錯誤消息:“找不到合適的排序方法。” 請幫忙。

Arrays類中沒有接受int[]Comparatorsort方法。 接受ComparatorArrays類中的sort方法需要一個引用類型的數組(而int[]是一個基本類型的數組)。

如果你改變你的類型, scores從數組int[]Integer[]您的代碼將工作,因為該方法public static <T> void sort(T[] a, Comparator<? super T> c)中的Arrays class將匹配您的Arrays.sort(scores, Collections.reverseOrder()); 呼叫。

final int EXAMS = 5;
Integer[] scores = new Integer [EXAMS]; // the only required change
for (int index = 0; index < EXAMS; index++) {
    System.out.println("Enter the score for " + (index+1) +":");
    scores[index] = kb.nextInt();
    if (scores[index] < 0){
        System.out.println("The number you have entered is invalid.");
        scores[index] = kb.nextInt();
    }
}
Arrays.sort(scores, Collections.reverseOrder());
System.out.println("The sorted int array is:");
for (int number : scores)  {
    System.out.println("Number = "+ number);
}

以下工作(使用Integer對象而不是原始int ):

Integer[] test = {1, 2, 4, 3, 5};
Arrays.sort(test, Collections.reverseOrder());
System.out.println(Arrays.toString(test)); // [5, 4, 3, 2, 1]
Collections.reverseOrder() 

無法工作,因為數組是原始類型。 你可以從int更改為Integer或嘗試不同的東西,如:

Arrays.sort(scores);
ArrayUtils.reverse(scores);

您最后的選擇是制作自己的代碼。

您只需要將數組類型從Primitive type更改為Primitive wrapper classint[] scores = new int [EXAMS]Integer[] scores = new Integer[EXAMS]

Arrays.sort接受第一個參數中的包裝器數組而不是基元。

Arrays.sort(a, Collections.reverseOrder());

不適用於原語。 試試這個,

Integer[] a = new Integer[]{1,2,3,5,4};
            Arrays.sort(a,Collections.reverseOrder());
            for(int i:a)
            {
                System.out.println(i);
            }

java中的數組沒有排序方法.But ArrayList有一個排序方法。你可以使用下面的代碼以相反的順序對列表進行排序。

List l=new ArrayList();
l.add(5);
l.add(1);
l.add(2);
l.add(3);
Collections.sort(l,Collections.reverseOrder());
System.out.println(l);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM