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

Posted

技术标签:

【中文标题】一种在数组中的两个索引之间交换位置的方法[重复]【英文标题】:A method that swaps places between two indexes in an array [duplicate] 【发布时间】:2017-10-22 13:12:43 【问题描述】:

我刚刚创建了一个方法,它应该在数组中的 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;
    

【问题讨论】:

将原始值(在本例中为 int)传递给方法复制该值。所以改变方法中的值并不会改变调用方法中的值。 【参考方案1】:

您的问题是误解

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

根本不会影响您的变量 l 和 r!它更新intArray;但不是intArray[0] 的原始值。 1 评估为!

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

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

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

【参考方案3】:

你可以使用:

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

【讨论】:

好的,但无论如何我可以用我当前使用的方法做到这一点吗? 感谢您的帮助编辑! @mackanmorre 我认为所有其他答案都给了你一个好方法,所以我不能在我的答案中包含他们的信息你可以关注他们中的任何一个:) 是的!大家的回答非常好!谢谢:)【参考方案4】:

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

就这样打印出来

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

【讨论】:

以上是关于一种在数组中的两个索引之间交换位置的方法[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java数组元素去重(不使用集合)

数组反转

交换数组两个数位置方法

js 实现数组元素交换位置

list和vector有啥区别

Ruby - 比较数组和交换索引