1

だから私は過去数日間このコードを理解しようとしてきましたが、どこにも行きません。これは私が得た中で最も遠いですが、現在は最終的なソートされた配列を表示していません.return mergedステートメントを超えて追加しようとしたコードは明らかに到達できません:/

import java.util.*;

public class MergeTestStringArray
{


  public static void main(String[] args)
  {
    ArrayList< String > array = new ArrayList< String >();

    array.add("John");
    array.add("Victor");
    array.add("Joe");
    array.add("Jackson");
    array.add("Anthony");
    array.add("Angelina");
    array.add("George");
    array.add("Paul");

    ArrayList< String > sortedArray = new ArrayList< String >();

    sortedArray = mergeSort(array);

    for (int i = 0; i < sortedArray.size(); i++)
    {
        System.out.println(" " + sortedArray.get(i) );
    }
  }

  public static ArrayList< String > mergeSort(ArrayList< String > list)
  {
    ArrayList < String > sorted = new ArrayList< String >();
    if (list.size() == 1)
    {
        sorted = list;
    } else {
        int mid1 = list.size() /2;

        ArrayList< String > left = new ArrayList< String >();
        ArrayList< String > right = new ArrayList< String >();

        for ( int x = 0; x < mid1; x++) {
            left.add(list.get(x));

        }
        for ( int x = mid1; x < list.size(); x++) {
            right.add(list.get(x));
        }

        System.out.println("Left Array: " + left);
        System.out.println("Right Array)" + right);

        mergeSort(left);
        mergeSort(right);
        mergeArray(left,right);
    }

    return sorted;
  }

private static ArrayList< String > mergeArray(ArrayList< String > left, ArrayList< String > right)
{
    ArrayList< String > merged = new ArrayList< String >();

    int i = 0;
    int l = 0;
    int r = 0;

    while (l < left.size() && r < right.size())
           {
              if ((left.get(l)).compareTo(right.get(r)) < 0)
              {
                 merged.add(left.get(l));
                 l++;
              }
              else
              {
                 merged.add(right.get(r));
                 r++;
              }

              i++;
           }


           while (l < left.size())
           {
              merged.add(left.get(l));
              l++;
              i++;
           }

           // Append rest of the values in the right half, if any...
           while (r < right.size())
           {
              merged.add(right.get(r));
              r++;
                  i++;
           }

    return merged;


  }

}
4

3 に答える 3

1

あなたの質問が何であるかわかりませんが.. return ステートメントの後のステートメントは通常到達できません。関数が return ステートメントに到達すると、関数が存在し、その return ステートメントで値を返します。

于 2012-09-11T02:15:58.467 に答える
1

あなたのエラーは、mergeSort 関数にあります。具体的には、再帰的なケースでは、並べ替えの結果を実際にmergedリストに保存することはありません。交換してみる

mergeArray(left,right);

sorted = mergeArray(left,right);
于 2012-09-11T02:22:20.847 に答える
0

の戻り値をmergeArrayto に割り当てますsorted

sorted = mergeArray(left,right);

そして、mergeSort 呼び出しの結果を割り当てます。

        left = mergeSort(left);
        right = mergeSort(right);

また、変数を使用しない場合は、変数を宣言するために空の ArrayList を作成する必要はありません。

以下で十分です。

ArrayList < String > sorted;
于 2012-09-11T02:29:07.967 に答える