gpt4 book ai didi

java - 在函数内更改 Java 中的对象

转载 作者:行者123 更新时间:2023-12-01 18:54:58 25 4
gpt4 key购买 nike

我尝试使用添加的代码实现列表的合并排序。我遇到的问题,我不知道是什么原因造成的:如果我直接调用 recursiveMergeSort,我会得到正确的排序列表,但是如果我尝试通过调用 mergeSort 对列表进行排序,我只会得到第一个的列表元素。

即,如果在 main 中我有一个列表 = "d","a","f","g","b"则

list = recursiveMergeSort(list) // list will be "a","b","d","f","g"
mergeSort(list) // list will be "a"

我需要做什么才能让 mergSort 得到与 recursiveMergeSort 相同的结果? (API 中给了我 public void 函数,这就是我创建私有(private)递归函数的原因)

public static void mergeSort(List list) {
if (list == null) throw new NullPointerException("list");
list = recursiveMergeSort(list);
/* If I check list here, I get the correct result,
only in the original it's wrong */
}
/** a recursive function for the merge sort */
private static List recursiveMergeSort(List list) {

int length = listLength(list);
System.out.println(length);
if (length <= 1) { // base case, list length 1
return list;
}

// create sublists
List left = new List(), right = new List();
List.Node indexList = list.head;
left.head = list.head;
for (int i = 0; i < length / 2 - 1; i++ ) {
indexList = indexList.getNext();
}
right.head = indexList.getNext();
indexList.setNext(null);

left = recursiveMergeSort(left); // recursively work on them
right = recursiveMergeSort(right);
List tempList = mergeLists(left, right); // final result
return tempList;
}

(合并列表只是将两个有序列表合并为一个有序列表。)

最佳答案

list是一个引用变量,引用一个List值。

您不能仅通过更改引用它的变量的值来更改引用值。

将初始函数更改为:

public static List mergeSort(List list) {
if (list == null) throw new NullPointerException("list");
return recursiveMergeSort(list);
}

您返回的值将是排序后的列表。

如果您确实需要更改参数,请尝试:

public static void mergeSort(List list) {
if (list == null) throw new NullPointerException("list");
List temp = recursiveMergeSort(list);
list.clear();
list.addAll(temp);
}

您可以通过调用对象的方法或更改其中字段的值(对象本身或其组件)来更改对象。 recursiveMergeSort 中的 indexList 是起始列表中节点的另一个引用,您可以使用 setNext(null)

更改它

关于java - 在函数内更改 Java 中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14325759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com