2016-10-18 7 views
0

だから、これは私のコードです:私のソート方法では、いくつかの文字列をソートできないのはなぜですか?

public ArrayList<Actor> SortArray(ArrayList<Actor> actorsArrayList){ 
    if (actorsArrayList.size()==2){ 
     if (actorsArrayList.get(0).getName().compareTo(actorsArrayList.get(1).getName())>0){ 
      Actor tmpActor = actorsArrayList.get(0); 
      actorsArrayList.set(0, actorsArrayList.get(1)); 
      actorsArrayList.set(1, tmpActor); 
     } 
    }if (actorsArrayList.size()>2){ 
     ArrayList<Actor> part1 = new ArrayList<Actor> (actorsArrayList.subList(0, actorsArrayList.size()/2)); 
     ArrayList<Actor> part2 = new ArrayList<Actor> (actorsArrayList.subList(actorsArrayList.size()/2, actorsArrayList.size())); 
     SortArray(part1); 
     SortArray(part2); 
     actorsArrayList = MergeArrays(part1,part2); 
    } 
    return actorsArrayList; 
} 

public ArrayList<Actor> MergeArrays(ArrayList<Actor> part1, ArrayList<Actor> part2){ 
    ArrayList<Actor> mergedArray = new ArrayList<Actor>(); 
    int i = 0; 
    int j = 0; 
    while (i<part1.size() && j<part2.size()){ 
     if (part1.get(i).getName().compareTo(part2.get(j).getName())<0){ 
      mergedArray.add(part1.get(i)); 
      i=i+1; 
     }else if (part1.get(i).getName().compareTo(part2.get(j).getName())>0){ 
      mergedArray.add(part2.get(j)); 
      j=j+1; 
     } 
    } 

    while (i<part1.size()){ 
     mergedArray.add(part1.get(i)); 
     i=i+1; 
    } 
    while (j<part2.size()){ 
     mergedArray.add(part2.get(j)); 
     j=j+1; 
    } 
    return mergedArray; 
} 

このコードは、文字列である、Actorクラスは、パラメータ名が含まれています(アルファベット順に並べ替えるために私自身のマージ方法を使用することにより、巨大なActorsArrayListで使用されることを意味しています私は配列をソートするために使用する)。私は現在、このメソッドを[d、a、b、l、z、x、y、c、w]を含む非常に単純な配列で動作させようとしています。それは完璧に機能しますが、開始順序が何であっても、 "l"は常に終了します。実際のアクターのarrayList(実際の名前が入っています)で試してみると、実際には何も並べ替えられません。

ありがとうございます。

編集1:明確化されたコード。並べ替える配列のサイズが0である場合、コメントする人がいる場合は必要ありません。

編集2:私のプログラムの前の段階でマージされていたので、同じ名前を持つ2人の俳優は決して存在しません。

+1

私はラクダのケーシングで変数を指定することをお勧めします。すべて大文字にするとコードを読みにくくします。 – Brunaldo

+1

tldr;デバッガでステップ実行します。コードを投稿する際には、Javaの命名規則に従ってください。それは本当に目の痛みです。 – Fildor

+1

あなたは少なくともcompareTo == 0の場合がありません。 –

答えて

0

actorsArrayList.size()>2ケースの問題はSortArray()です。各部品を新しいArrayListにソートしていますが、MergeArrays()への呼び出しでソートされたリストを使用することは忘れてしまいます。このように修正してください:

 part1 = SortArray(part1); 
     part2 = SortArray(part2); 
関連する問題