JAVA:按降序对数组进行排序

时间:2017-05-04 11:55:17

标签: java

我试图按降序对数组进行排序,我知道有许多在线排序数组的例子,但我只想尝试按照自己的方式进行(只是尝试测试看看算法实际上可以工作)。但是有些原因,我无法输出存储结果的数组,我尝试过使用System.out.println(Arrays.toString(myList));并且一次打印它们,它适用于我创建的数组之一,但是当试图通过循环修改数组时,它拒绝输出任何内容,没有错误,没有任何东西就像什么都没有。非常感谢您的帮助。见下面的代码。感谢。

import java.util.Arrays;

public class TestArray {

   public static void main(String[] args) {
      double[] myList = {1.9, 2.9, 9.2, 3.4, 4.2, 6.7, 3.5};
      double[] sortedList = new double[7] ; 


      // Print all the array elements
      for (double i: myList) {
         System.out.println(i + " ");
      }

      // Summing all elements
      double total = 0;
      for (double x: myList) {
         total += x;
      }
      System.out.println("Total is " + total);

      // Finding the largest element
      double max = myList[0];
      int m, z = 0;

      for (double k: myList) {
         if (k > max) max = k;
      }

      do{
        for (int i = m; i < myList.length; i++) {
          if (myList[i] > max){      
             max = myList[i];  
             z = i;
          }
        }

        sortedList[m] = max;
        myList[z] =0;
        m++;

      } while(m < myList.length);

      System.out.println("Max is " + max);
      //System.out.println(Arrays.toString(myList)); 
      for (double y: sortedList) {
         System.out.println(y + " ");
      }
   }
}

4 个答案:

答案 0 :(得分:1)

您只需使用内置函数按降序对数组进行排序

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

System.out.println("myList Array Elements in reverse order:");
    for (int i = 0; i < myList .length; i++)
       System.out.println(intArray[i]);

它肯定会起作用。

答案 1 :(得分:0)

您的排序逻辑无法正常运行。我对它做了一些修改,试一试:

    do {
           max = 0;
           for (int i = 0; i < myList.length; i++) {
               if (myList[i] > max) {
                   max = myList[i];
                   z = i;
               }
           }

           sortedList[m] = max;
           myList[z] = 0;
           m++;

   } while (m < myList.length);

答案 2 :(得分:0)

首先,您需要将此行int m, z = 0;转换为int m = 0, z = 0; 因为int m, z = 0;相当于int m; int z = 0;。因此,当您尝试使用变量m时 - 它尚未初始化并导致编译错误。 修复上述语句后,程序将编译并运行,但程序逻辑中也存在错误,结果排序数组将输出为:

{9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2}

如以下栏目

for (double k: myList) { if (k > max) max = k; }

您最初找到的最大值为9.2。这就是为什么以后执行do .. while并检查条件

的原因

if (myList[i] > max){ max = myList[i]; z = i; }

语句myList[i] > max将永远不会返回true,因此您的max将始终保持为9.2,z将始终保持0。这就是为什么行sortedList[m] = max;总是将9.2插入到已排序数组的每个索引。

在这种情况下,我建议您使用您选择的IDE(Intellij Idea,Eclipse等),它将突出显示编译错误并帮助您使用集成调试器找到您的错误。

所以我发现你的错误,我想现在你可以管理它了。如有其他帮助,请随时与我们联系。

答案 3 :(得分:0)

以下代码适用于我。

public class Main {

public static void main(String[] args) {
    double[] myList = {1.9, 2.9, 9.2, 3.4, 4.2, 6.7, 3.5};
    double[] sortedList = new double[7] ;


    // Print all the array elements
    for (double i: myList) {
        System.out.println(i + " ");
    }

    // Summing all elements
    double total = 0;
    for (double x: myList) {
        total += x;
    }
    System.out.println("Total is " + total);

    // Finding the largest element
    double max = myList[0];
    int m = 0;
    int z = 0;

    do{
        for (int i = 0; i < myList.length; i++) {
            if (myList[i] > max){
                max = myList[i];
                z = i;
            }
        }

        sortedList[m] = max;
        myList[z] =0;
        m++;
        max = 0;

    } while(m < myList.length);

    System.out.println("Max is " + max);
    //System.out.println(Arrays.toString(myList));
    for (double y: sortedList) {
        System.out.println(y + " ");
    }
}
}

您的代码包含三个错误:

1.您没有重置&#39; max&#39;在每次迭代中,导致排序列表&#39; 在每个条目中仅包含值9.2。

  1. for (double k: myList) {
     if (k > max) max = k;
    }
    

    是不必要的。而且,它甚至不跟踪最大元素的位置。

  2. 3

    for (int i = m; i < myList.length; i++)
    

    应改为

    for (int i = 0; i < myList.length; i++)
    

    您在排序列表中的位置&#39;与你在哪里无关 找到&#39; myList&#39;的最大元素。