我刚刚创建了一个应该在数组中的index [0]和index [1]之间交换位置的方法。
但是,我似乎无法找到如何将其返回到main方法,然后以交换顺序将其打印出来。
我做错了什么?
ids
答案 0 :(得分:2)
您可以使用:
public static int[] exchange(int[] intArray, int l, int r) {
// ^^---------------return type
....
return intArray;//<<---------return your result array
}
要打印数组,您可以使用Arrays.toString
:
System.out.println(Arrays.toString(exchange(intArray, intArray[0], intArray[1])));;
或者您可以将结果分配给另一个数组,例如:
int[] result = exchange(intArray, intArray[0], intArray[1]);
System.out.println(Arrays.toString(result));
<强>输出强>
right order:2 4
[4, 2]
right order:2 4
答案 1 :(得分:2)
你为什么要归还某些东西?当您将引用传递给对象时,将更新该数组。 但是,l
和r
将不会更新。
只需打印出来
System.out.println("right order:" + l + " " + r);
exchange(intArray, intArray[0], intArray[1]);
System.out.println("right order:" + intArray[0] + " " + intArray[1]);
答案 2 :(得分:2)
您的问题是误解:
exchange(intArray, intArray[0], intArray[1]);
根本不会影响你的变量l和r!它会更新intArray
;但不是intArray[0]
所依据的原始值。 1评估为!
含义:重复使用相同的变量名称这一事实并没有神奇地将这些变量转化为“一个”。有两个变量名为l。一个存在于main()
中,一个存在于exchange()
中。另一个要理解的核心事项是:Java 按值调用;但这意味着:将数组传递给某个方法时,对该调用程序的参数更改可见。
但是当传递诸如int的原始类型时,调用者看不到更新。有关所有详细信息,请参阅here。
答案 3 :(得分:1)
您的阵列已更新。但是,您缺少打印语句以打印出更新的数组。
System.out.println("right order:" + intArray[0] + " " + intArray[1]);
编辑1:我建议您将数组的内存模型,交换方法的可用性以及这一切都变得如此简单。记住Java通过值传递,包括引用,该数组是引用。