Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在数组中的两个索引之间交换位置的方法_Java_Arrays_Methods_Main_Swap - Fatal编程技术网

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

Java 在数组中的两个索引之间交换位置的方法,java,arrays,methods,main,swap,Java,Arrays,Methods,Main,Swap,我刚刚创建了一个方法,该方法应该在数组中的索引[0]和索引[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

我刚刚创建了一个方法,该方法应该在数组中的索引[0]和索引[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;
    }
}
您可以使用:

public static int[] exchange(int[] intArray, int l, int r) {
//             ^^---------------return type
    ....
    return intArray;//<<---------return your result array 
}
或者,您可以将结果分配给另一个数组,例如:

int[] result = exchange(intArray, intArray[0], intArray[1]);
System.out.println(Arrays.toString(result));
输出

您可以使用:

public static int[] exchange(int[] intArray, int l, int r) {
//             ^^---------------return type
    ....
    return intArray;//<<---------return your result array 
}
或者,您可以将结果分配给另一个数组,例如:

int[] result = exchange(intArray, intArray[0], intArray[1]);
System.out.println(Arrays.toString(result));
输出


你为什么要退货?当您向对象传递引用时,该数组将被更新。但是,l和r将不会更新

就这样打印出来

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

你为什么要退货?当您向对象传递引用时,该数组将被更新。但是,l和r将不会更新

就这样打印出来

System.out.println("right order:" + l + " " + r);
exchange(intArray, intArray[0], intArray[1]);
System.out.println("right order:" + intArray[0] + " " + intArray[1]);
你的问题是一种误解:

根本不会影响变量l和r!它在阵列中更新;但不是数组[0]中相应的基元值。评估到

意思:重复使用相同的变量名并不能神奇地将这些变量变成一件事。有两个名为l的变量。一个存在于主体中,一个存在于交换中。要理解的另一个核心问题是:Java确实是按值调用的;但这意味着:当向方法传递数组时,调用方可以看到对参数的更改

但是当传递诸如int之类的基本类型时,调用方看不到更新。有关所有详细信息,请参阅。

您的问题是一种误解:

根本不会影响变量l和r!它在阵列中更新;但不是数组[0]中相应的基元值。评估到

意思:重复使用相同的变量名并不能神奇地将这些变量变成一件事。有两个名为l的变量。一个存在于主体中,一个存在于交换中。要理解的另一个核心问题是:Java确实是按值调用的;但这意味着:当向方法传递数组时,调用方可以看到对参数的更改


但是当传递诸如int之类的基本类型时,调用方看不到更新。有关所有详细信息,请参阅。

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

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

编辑1:我建议你用铅笔画出数组的内存模型,它是如何提供给交换方法的,然后这一切都会很容易。请记住,Java通过包含引用的值进行传递,并且该数组是一个引用。

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

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

编辑1:我建议你用铅笔画出数组的内存模型,它是如何提供给交换方法的,然后这一切都会很容易。请记住,Java通过包含引用的值进行传递,并且该数组是一个引用。

好的,但是我是否可以使用当前使用的方法进行传递?谢谢您的帮助编辑@Mackanmore我认为所有其他的答案都给了你一个很好的方法,所以我不能在我的答案中包含这些信息,你可以遵循其中任何一个:是的!你们的回答都很好!谢谢:好的,但是我现在用的方法还能做吗?谢谢你的帮助@Mackanmore我认为所有其他的答案都给了你一个很好的方法,所以我不能在我的答案中包含这些信息,你可以遵循其中任何一个:是的!你们的回答都很好!谢谢:在本例中,将原语值int传递给方法会复制该值。因此,更改方法中的值不会更改调用方法中的值。在本例中,将基元值int传递给方法会复制该值。因此,更改方法中的值不会更改调用方法中的值。