0

こんにちは、マージソートを行っていますが、すべてが正しいと思います。merge_sort 関数の最後の 2 行で苦労しています...最後の行から 2 番目の行では、「整数を変数に解決できません、ArrayList を変数に解決できません。型の不一致: ArrayList から int[] に変換できません。" そして最後の行には、「型の不一致は int[] から ArrayList に変換できません」と書かれています。どうすればこれを修正できますか? どんな助けでも大歓迎です!!

public static ArrayList<Integer>  merge_sort(ArrayList<Integer> B)
{
    if (B.size() <= 1)
        System.out.println(B);


    int midpoint = B.size()/2;
    ArrayList<Integer> left = new ArrayList<Integer>(midpoint);
    ArrayList<Integer> right;
    if(B.size() % 2 == 0)
        right = new ArrayList<Integer>(midpoint);
    else
        right = new ArrayList<Integer>(midpoint + 1);

    int[] result = new int[B.size()];

    for (int i = 0; i < midpoint; i++)
        left.set(i, B.get(i));



    int x = 0;
    for (int j = midpoint; j < B.size(); j++)
    {
        if(x < right.size())
            right.set(x, B.get(j));
            x++;
    }

    left = merge_sort(left);
    right = merge_sort(right);

    result = merge(left, right);
    return result;
}

public static ArrayList<Integer> merge(ArrayList<Integer> left, ArrayList<Integer> right)
{
    int lengthResult = left.size() + right.size();
    ArrayList<Integer> result = new ArrayList<Integer>(lengthResult);
    int indexL = 0;
    int indexR = 0;
    int indexRes = 0;

    while (indexL < left.size() || indexR < right.size())
    {
        if(indexL < left.size() && indexR < right.size())
        {
            if (left.get(indexL) <= right.get(indexR))
            {
                result.set(indexRes, left.get(indexL));
                indexL++;
                indexRes++;
            }
            else
            {
                result.set(indexRes, right.get(indexR));
                indexR++;
                indexRes++;
            }   
        }
        else if (indexL < left.size())
        {
            result.set(indexRes, left.get(indexL));
            indexL++;
            indexRes++;
        }
        else if (indexR < right.size())
        {
            result.set(indexRes, right.get(indexR));
            indexR++;
            indexRes++;
        }
    }
    return result;
}
4

3 に答える 3

1

この行を削除

int[] result = new int[B.size()];

これを変更します

List<Integer> result = merge(left, right);
于 2013-10-07T04:54:52.513 に答える
0

結果は int[] ですが、merge() メソッドは配列リストを返します。結果をリストに変更してみてください

result = merge(left, right);

result type =int[]merge(left, right); returns ArrayList<Integer>

List<Integer> result;代わりに試してくださいint[] result;

于 2013-10-07T04:57:21.220 に答える
0

問題は、Java では int と Integer の扱いが異なり、一方はプリミティブ型、もう一方はクラスとして扱われることです。したがって、整数を使用している場合は、そのまま使用してください。

したがって、コードは次のようになります

List<Integer> result = merge(left, right);

定義する代わりにint[] result

于 2013-10-07T04:57:59.170 に答える