【问题标题】:Why is my java swap function not working? [duplicate]为什么我的 java 交换功能不起作用? [复制]
【发布时间】:2015-09-27 05:27:18
【问题描述】:

我正在尝试在 java 中创建一个交换函数,但为什么这不起作用?

void swap(int a, int b) {
   int temp = a;
   a = b;
   b = temp;
}

【问题讨论】:

  • 提示:你不能编写在 Java 中工作的交换(带有该签名)。

标签: java swap


【解决方案1】:

因为 java 是 pass by value 而不是通过引用传递。你的交换方法不会改变实际的ab。你实际上交换了ab,它们只在方法内部有生命。您可以通过在 swap 方法中打印 ab 来检查。

您可以在数组的帮助下返回交换的值。 (由sᴜʀᴇsʜ ᴀᴛᴛᴀ先添加)

public class Test {

    static int[] swap(int a, int b) {
       return new int[]{b,a};
    }

    public static void main(String[] args) {
        int a = 10,b = 5;
        int[] ba = swap(a,b);
        a = ba[0];
        b = ba[1];
        System.out.println(a);
        System.out.println(b);
    }

}

【讨论】:

  • 在我写的时候,你发布了一个很好的答案。添加了我的解决方案您的答案。随意审查和恢复:)
  • 值得注意的是,java 是按值传递的,但是对于对象,它在许多方面就像是按引用传递一样,因为对象实际上是对象指针。
【解决方案2】:

您的swap 只是将值的副本复制到ab,因此您只是在swap 的范围内交换ab 变量中的值。

【讨论】:

  • 说真的??这个答案怎么比TAsk的答案更简洁?
【解决方案3】:
public class HelloWorld {
    private int a, b;
    HelloWorld(){
        this.a=0;
        this.b=0;
    }
    HelloWorld(int a, int b){
        this.a=a;
        this.b=b;
    }
    void swap() {
       int temp = this.a;
       this.a = this.b;
       this.b = temp;
    }
    public static void main(String[] args) {
        HelloWorld obj = new HelloWorld(10,5);
        obj.swap();
        System.out.println("a="+obj.a);
        System.out.println("b="+obj.b);
    }

}

如果您使用局部变量,则范围将在 swap() 方法内。但是,如果您将其用作实例变量,则此示例会有所帮助。
实例变量的范围将在整个类中可用。
对于范围,您可以查看
http://www.tutorialspoint.com/java/java_variable_types.htm
如果您想使用局部变量,那么 TAsk 给出的答案会更有帮助。根据您的要求。

【讨论】:

  • 你的代码让 OP 哭了:D
猜你喜欢
  • 1970-01-01
  • 2013-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-10
  • 1970-01-01
  • 2021-06-03
  • 2011-01-03
相关资源
最近更新 更多