这个问题已经在这里有一个答案:
- 如何用Java编写[复制]一个基本的交换功能 19个回答
- Java方法换元 7个回答
这里的问题是:写交换两个变量的方法。 这两个变量应该是原语。 它并不需要是通用例如两个int
变量。 有没有办法?
这个问题已经在这里有一个答案:
这里的问题是:写交换两个变量的方法。 这两个变量应该是原语。 它并不需要是通用例如两个int
变量。 有没有办法?
不使用阵列或对象,没有,它是不可能的,方法中做到这一点。
虽然这是不可能写出简单地交换两个变量的函数,可以写一个辅助函数 ,使您可以:
这就是你怎么可以这样做:
int returnFirst(int x, int y) {
return x;
}
int a = 8, b = 3;
a = returnFirst(b, b = a); // try reading this as a = b; b = a;
System.out.println("a: " + a + ", b: " + b); // prints a: 3, b: 8
这工作,因为Java语言担保(Java语言规范,Java SE 7中版第15.12.4.2),从左至右(其它语言不同,在评估的顺序是不确定的)所有参数进行评估,这样的执行顺序是:
b
,以便评价作为第一个参数的函数被传递 b = a
被评估,并且结果(新值b
)作为第二个参数的函数传递 b
和忽略了它新的价值 a
如果returnFirst
太长,你可以选择一个较短的名称,使代码更紧凑(例如a = sw(b, b = a)
用这个来打动你的朋友和迷惑敌人:-)
看看这篇文章JavaWorld的解释得很详细:
http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html
两个基本的交换行不通,因为原语是按值在Java中通过。 你甚至不能写交换两个对象为此事的方法。
就像@Thomas说,你唯一可以做的一件事就是包含其它物品/阵列中的原语和修改这些。
一班轮任何原始的数字:
a += (b - (b = a));
你可以使交换任何数量的相同类型的对象@马库斯的交换方法的通用版本:
<T> T swap(T... args) { // usage: z = swap(a, a=b, b=c, ... y=z);
return args[0];
}
b = swap(a, a=b);
z = swap(x, x=y, y=z);
在Java5的,我能想到的,它可以帮助你最接近的,就是:
该的AtomicInteger类(和其他人)有getAndSet()
原子的方法..
要编写交换你得有“OUT”的变量,即变量,其值被向上传递给调用上下文的概念原语的交换方法。 C#有这些,但你仍必须指定,他们是出来的变量。
这个功能将交换两个整数
Integer[] swap(int a, int b){
return new Integer[]{b,a};
}
下面是一个交换两个原始变量的方法
private void swap(){
int a = 1;
int b = 2;
int temp = a;
a = b;
b = temp;
}
它可能没有多大用处的,虽然;)
好严重的是,它可如果变量类级别进行:
public class MyClass{
// excuse horrible coding practice of public mutable fields
public int a = 1;
public int b = 2;
public void swap(){
int temp = a;
a = b;
b = temp;
}
}
再次,虽然,我无法看到使用的,这可能是什么
我已阅读上述回答寻求解释为什么它是说,一个交换程序不能写在它是用C的方式使用Java ++。 我做了以下的方法程序截图
正如托马斯·欧文斯说。 你也许可以通过与基准传递变量做,在C,但据我所知不是在没有使用对象的Java。
是有可能使用一种方法来交换两个变量。 但是,你应该声明,法空括号,然后通过引用(空括号)调用它 。 下面是示出了使用方法的两个可变的交换的例子。
公共类交换实现
{
static String A="Apple";
static String B="Bat";
public static void swap()
{
String k;
k=A;
A=B;
B=k;
}
public static void main(String[] args)
{
System.out.println("Before swapping");
System.out.println("A= "+A);
System.out.println("B= "+B);
swap();
System.out.println("After swapping");
System.out.println("A= "+A);
System.out.println("B= "+B);
}
}
通过编译上述代码的输出来如下:
之前交换
A =苹果
B =蝙蝠
交换后
A =蝙蝠
B =苹果
//在通过引用原始值呼叫的情况下,如果我们作出所调用的方法的变化改变
public class Swap
{
public static void main (String[]args)
{
int y = 5;
int x = 4;
int c;
System.out.println("y = "+y);
System.out.println("x = "+x);
c=x; //c = 4
x=y; //x = 5;
y=c;
System.out.println("\n");
System.out.println("y= "+y);
System.out.println("x= "+x);
}
}