gpt4 book ai didi

java - 使用递归返回 void 方法

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

我正在尝试对字符串数组实现快速排序,但我不知道如何从 void 方法返回字符串数组。 P.S.:以防万一,我想告诉您,所有其他方法(例如交换和分区)都已实现,我认为您不需要看到它们。不能选择使用任何第三方帮助程序库。

public static String[] quicksort(String[] a)
{
int low = 0;
int high = a.length;
quicksort_lomuto(a, low, high);
return a; //<-- Here is the problem!!! What am I supposed to return?
}
public static void quicksort_lomuto(String[] a, int i, int j)
{
if(j-i < 2) return;
int k = partition_lomuto(a, i, j);
quicksort_lomuto(a, i, k);
quicksort_lomuto(a, k+1, j);
}

最佳答案

如果必须返回void,则只需更改数组的内容即可。虽然数组参数是按值传递的,但该“值”本质上是指向数组的指针,而不是数组的完整内容。一个例子:

 public static void main(String[] args) {
String[] arr = new String[]{ "foo", "bar" };
changeMyArray(arr);
System.out.println(arr[0] + "," + arr[1]); // output is: foo,baz
}

private static void changeMyArray(String[] myArray) {
myArray[1] = "baz";
}

如果您将数组参数设置为某些内容 (a = mumble),则从方法返回时不会反射(reflect)出来。但是,如果您将数组的内容设置为某些内容(a[i] = mumble),它就会。

您可能不希望改变输入数组。在这种情况下,您可以使用“输出参数”实现相同的解决方案。

public static void quicksort_lomuto(String[] inputArray, int i, int j, String[] outputArray)
{
if (outputArray == null)
{
throw new IllegalArgumentException("outputArray cannot be null");
}
if (outputArray.length != inputarray.length)
{
throw new IllegalArgumentException(
"outputArray must be the same length as inputArray");
}
/* sort inputArray, putting values into outputArray */
}

关于java - 使用递归返回 void 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26433861/

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