2016-10-18 22 views
-2

私は働いているプログラムにとても苦労しています。Javaで順序付きリンクリストをアルファベット順にするには?

プログラムは、アルファベット順に、順序付きリンクリストの要素を(リストに利用可能なセッターがないので)印刷することになっています。ここに私が持っているものがあります:

GOrderedListはノードです、イベントは値です。私は言葉を見つけてアルファベット順に配置しようと考えました。

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. 外部ループの各繰り返しは、その要素を適切な位置に追加する必要があります。書かれているように、付加価値は常に終わりに向かいます。

前述したように、これを行うための標準的な方法がありますが、私はこれを練習として行う必要があると想定しています。そうでない場合は、コンパレータを使用します。 Stringの自然な比較は、あなたが望むものを正確に与えるかもしれません。

+0

の場合、 'GOrderedList'で正しく推測した場合、' getNext() 'は進まず、単に次のノードへの参照(またはnull)を返します。 2.の場合、リストがすでに注文されている場合は、クラス名が示唆するように、これは異なる注文が必要な場合にのみ問題になります。私はOPが私たちに言いたいと思う。 –

+0

getNext()は進まず、参照のみを返します。リストは既に注文されており、それ自体では並べ替えることはできませんが、アルファベット順に印刷する必要があります。私は要素をアルファベット順に新しいArrayListに配置する考えがありました。 ArrayListにアイテムを配置して並べ替えることもできますが、そうしないでください。 –

関連する問題