2016-10-18 81 views
-2

我在工作的程序中遇到了很多麻煩。如何在Java中按字母排序鏈接列表?

該程序應按字母順序打印出有序鏈接列表的元素(因爲沒有可用於列表的setter)。以下是我的:

GOrderedList是節點,Event是值。我有想法試圖找到這些單詞,並按字母順序將它們放置在一個數組列表中。

public static ArrayList <String> sortEvents (GOrderedList <Event> C){ 

    //create arraylist 
    ArrayList <String> sortedList = new ArrayList <String>(); 

    while (C.getNext()!=null){ 
     GOrderedList <Event> first = C.getNext(); 
     String highest = first.getValue().getname(); 

     while (first.getNext()!=null){ 
     if (first.getNext().getValue().getname().compareTo(highest)<0){ 
      highest=C.getNext().getValue().getname(); 
      } 
      first=first.getNext(); 
     } 
     sortedList.add(highest); 
     C = C.getNext(); 
    } 

這是產生的清單 - 這是令人鼓舞的 - 但它是無序的。我有按照字母順序將元素放入新ArrayList的想法。我可以將這些項目放入ArrayList中,然後對其進行排序,但我寧願不這樣做。

+1

它產生錯誤的輸出?它產生了什麼樣的輸出?你期望輸出什麼? –

+0

什麼是GOrderedList的層次結構?你不能使用Collections.sort()? – Mahesh

+0

對不起,根據您提供的信息,我們沒有機會幫助您。尋求調試幫助的問題(「爲什麼這個代碼不工作?」)必須包含所需的行爲,特定的問題或錯誤以及在問題本身中重現問題所需的最短代碼。沒有明確問題陳述的問題對其他讀者無益。 –

回答

0

您可以使用比較器對它進行排序。如下所示。

public static ArrayList<String> sortEvents(GOrderedList<Event> C) { 
     // create arraylist 
     ArrayList<String> sortedList = new ArrayList<String>(); 

     while (true) { 
      GOrderedList<Event> first = C.getNext(); 
      if (first == null) { 
       break; 
      } 
      String highest = first.getValue().getname(); 
      sortedList .add(highest); 
     } 
     Collections.sort(sortedList , new Comparator<String>() { 
      public int compare(String f1, String f2) { 
       return f1.toString().compareTo(f2.toString()); 
      } 
     }); 

     return sortedList ; 
    }; 
0

沒有與代碼的幾個問題:

  1. 在while循環中調用getNext()將遞增,每次跳躍的值。您可能需要致電hasNext()方法。

  2. 外層循環的每次迭代需要將其元素添加到適當的位置。正如所寫,增值總是會在最後。

如前所述,有標準的方法來做到這一點,但我的假設是,你需要做這個練習。如果不是,請使用比較器。字符串的自然比較可能會給你正是你想要的。

+0

對於1.,如果我在'GOrderedList'猜測正確,'getNext()'不前進,只是返回一個對下一個節點(或null)的引用。對於2.,如果列表已經排序,如類名所示,如果需要不同的排序,這只是一個問題。我希望OP會告訴我們。 –

+0

你說得對,getNext()不會前進,只返回引用。該列表已經訂購了,不能自行重新排序 - 但需要按字母順序打印,因此是問題。我有按照字母順序將元素放入新ArrayList的想法。我可以將這些項目放入ArrayList中,然後對其進行排序,但我寧願不這樣做。 –