【问题标题】:Array Sorting Descending Order数组降序排序
【发布时间】:2015-11-01 07:17:57
【问题描述】:

我是一个新的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());

我收到一条错误消息:“找不到合适的排序方法。”请帮忙。

【问题讨论】:

  • 在插入时对数组进行排序..

标签: java arrays sorting


【解决方案1】:
Collections.reverseOrder() 

因为数组是原始类型,所以不起作用。您可以从 int 更改为 Integer 或尝试不同的方法,例如:

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

您的最终选择是编写自己的代码。

【讨论】:

    【解决方案2】:

    以下工作(使用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]
    

    【讨论】:

      【解决方案3】:

      Arrays 类中没有sort 方法可以接受int[]ComparatorArrays 类中接受Comparatorsort 方法需要引用类型的数组(而int[] 是基本类型的数组)。

      如果您将 scores 数组的类型从 int[] 更改为 Integer[],您的代码将起作用,因为 Arrays 类的方法 public static &lt;T&gt; void sort(T[] a, Comparator&lt;? super T&gt; c) 将匹配您的 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);
      }
      

      【讨论】:

        【解决方案4】:

        您只需将数组类型从Primitive type 更改为Primitive wrapper class,即int[] scores = new int [EXAMS] 更改为Integer[] scores = new Integer[EXAMS]

        Arrays.sort 在第一个参数中接受包装器数组而不是原始参数。

        【讨论】:

          【解决方案5】:
          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);
                      }
          

          【讨论】:

            【解决方案6】:

            java中没有数组的排序方法,但是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);
            

            【讨论】:

              猜你喜欢
              • 2022-01-05
              • 2023-04-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-02-16
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多