一种在数组中的两个索引之间交换位置的方法

时间:2017-05-22 19:01:58

标签: java arrays methods main swap

我刚刚创建了一个应该在数组中的index [0]和index [1]之间交换位置的方法。

但是,我似乎无法找到如何将其返回到main方法,然后以交换顺序将其打印出来。

我做错了什么?

ids

4 个答案:

答案 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)

你为什么要归还某些东西?当您将引用传递给对象时,将更新该数组。 但是,lr将不会更新

只需打印出来

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通过值传递,包括引用,该数组是引用。