2017-05-04 522 views
0

我想按降序對數組進行排序,我知道有很多在線排序數組的例子,但我只是想嘗試以我自己的方式來做(只是嘗試以測試算法是否可以實際工作)。但由於某些原因,我無法輸出結果存儲數組,我嘗試使用System.out.println(Arrays.toString(myList));並且一次打印它們,它適用於我創建的一個數組,但是當嘗試通過循環修改數組時,它拒絕輸出任何內容,沒有錯誤,沒有任何內容,就好像沒有任何內容。您的幫助將不勝感激。看下面的代碼。謝謝。JAVA:按降序排列數組

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 + " "); 
     } 
    } 
} 
+0

看來,你從來沒有分配任何東西到'sortedList',除了可能的第一個元素。 –

+0

@TimBiegeleisen實際上他似乎這麼做,但由於意圖不佳,很難發現。我會修復:) – Thomas

+0

@Thomas感謝您的編輯:-) –

回答

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); 
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]); 

這將肯定工作。

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等),它將突出顯示編譯錯誤並幫助您使用集成調試器查找錯誤。

所以我剛剛發現你的錯誤,我想現在你可以管理它。如果有其他幫助,可隨時溝通。

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.You失敗在每次迭代重置「最大」,導致「排序列表」 只包含在每一個條目中的值9.2。

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

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

  • 3.

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

    應改爲

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

    你在「排序列表」的位置無關,與在那裏你可以找到 的最大元素'myList'。