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



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

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

我做错了什么?

public class Uppgift4_6a {
    public static void main(String[] args) {
        int [] intArray= new int [] {2, 4};
        int l= intArray[0];
        int r= intArray[1];
        System.out.println("right order:" + l + " " + r);
        exchange(intArray, intArray[0], intArray[1]);
        System.out.println("right order:" + l + " " + r);
    }
    public static void exchange (int[] intArray, int l, int r){
        l = intArray[0]; 
        r = intArray[1];
        intArray[1] = l;
        intArray[0] = r;
        return;
    }
}

为什么要返回一些东西?数组将在传递对对象的引用时更新。但是,lr将不会更新

就这样打印出来

System.out.println("right order:" + l + " " + r);
exchange(intArray, intArray[0], intArray[1]);
System.out.println("right order:" + intArray[0] + " " + intArray[1]);

您可以使用:

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

你的问题是一个误解

 exchange(intArray, intArray[0], intArray[1]);

根本不影响你的变量 l 和 r!它更新intArray;但不是intArray[0]或 1 计算的基元值!

意思是:重复使用相同的变量名称这一事实不会神奇地将这些变量变成"一个"东西。有两个名为 l 的变量。一个存在于main(),一个存在于exchange()。另一个要理解的核心事情是:Java确实按值调用;但这意味着:将数组传递给方法时,对参数的更改对调用方可见

但是,在传递基元类型(如 int(时,调用方看不到更新。有关所有详细信息,请参阅此处。

您的数组已更新。但是,您缺少用于打印更新数组的打印语句。

System.out.println("right order:" + intArray[0] + " " + intArray[1]);

编辑 1:我建议你写出数组的内存模型,它如何可用于交换方法,然后这一切都会变得如此简单。请记住,Java 按值(包括引用(传递,该数组是引用。

最新更新