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

A method that swaps places between two indexes in an array

我刚刚创建了一个方法,用于交换数组中索引[0] 和索引[1] 之间的位置。

但是我似乎无法找到我应该如何 return 将其添加到主要方法,然后按交换顺序将其打印出来。

我做错了什么?

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;
    }
}

您可以使用:

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

你为什么想要 return 东西?当您传递对对象的引用时,数组将被更新。 但是,lr不会更新

就这样打印出来

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

你的问题是误解

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

一点也不影响你的变量 l 和 r!它更新 intArray;但不是 intArray[0] 的原始值。 1 评估为!

意思是:重复使用相同的变量名并不会神奇地将这些变量变成"one"。有 两个 个名为 l 的变量。一种存在于 main(),一种存在于 exchange()。另一个需要理解的核心内容:Java 确实 按值调用 ;但这意味着:当将 array 传递给方法时,对参数的更改对调用者是 visible

但是当传递原始类型如 int 时,调用者 看不到 更新。有关所有详细信息,请参阅 here

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

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

编辑 1:我建议您勾勒出数组的内存模型,以及交换方法如何使用它,这样一切都会变得非常简单。请记住 Java 按包括引用在内的值传递,并且该数组是一个引用。