如何将我的数组列表<integer>设置为等于函数?



你好所以我正在做合并排序,我认为一切都是正确的,我只是很难处理merge_sort函数的最后两行......在倒数第二行,它说"整数不能解析为变量,ArrayList不能解析为变量,类型不匹配:无法从ArrayList转换为int[]。最后一行说:"Type Mismatch无法从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;
}

删除此行

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

并改变这一点

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

你的结果是 int[],但 merge() 方法返回一个数组列表,,尝试将结果更改为列表

result = merge(left, right);

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

尝试List<Integer> result;而不是int[] result;

问题是,在java中,int和Integer的处理方式不同,一个是基元类型,另一个是类。因此,如果您使用的是 Integer,请始终按原样使用它。

因此,您的代码变为

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

而不是定义int[] result

最新更新