这是一个问题:写一个交换两个变量的方法。这两个变量应该是原始的。它不需要是通用的,例如两个int
变量。有没有办法?是否可以在Java中编写交换方法?
回答
如果不使用数组或对象,则不可以在方法内执行此操作。
btw,数组是对象,所以你只需要说对象。来自java.sun.com:“一个数组是一个容器对象,它拥有固定数量的单一类型的值。”被挑剔,我知道:) – geowa4 2009-09-01 16:00:30
那么怎么可能通过使用数组或对象?这些数组或对象是否在方法内部不被使用?他们是全球吗?或者可以使用本地数组或对象在一个方法内交换对象? – c0d3Junk13 2012-03-21 19:50:11
@ geowa4我认为可以同时向新来者介绍数组是一个对象。 – 2013-10-23 08:07:57
看看这个JavaWorld的文章,解释它的细节:
http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html
两个基本的交换行不通,因为原语是按值在Java中通过。你甚至不能写一个方法来交换两个对象。
就像@Thomas说的,你唯一能做的就是让你的原语包含在其他对象/数组中并修改它们。
正如托马斯·欧文斯说: 。你可以在C中通过&引用来传递变量,但afaik不使用Java而不使用对象。
要编写交换原语的交换方法,您必须具有“out”变量的概念,即变量的值将传递给调用上下文。 C#有这些,但是你仍然必须指定它们不在变量中。
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);
}
}
此功能将交换两个整数
Integer[] swap(int a, int b){
return new Integer[]{b,a};
}
虽然这是不可能写出简单地交换两个变量的函数,可以写一个辅助函数,使您可以:
- 交换两个使用只有一个语句变量
- 没有临时变量在调用者的代码
- 没有“拳击”元
- 少数重载(其中一人使用泛型),它适用于任何类型的
那怎么你可以这样做:
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 La nguage规范,Java SE 7版,第15.12.4节。2)所有的参数都从左至右(和其它语言不同,在那里计算的顺序是不确定的)来评价,所以该执行顺序是:
- 的
b
原始值,以便进行评估,以传递作为第一个参数的函数 - 表达
b = a
被评估,并且结果(b
新值)作为第二个参数函数 - 功能执行被传递,返回的
b
原始值,而忽略其新值 - 你assi GN的结果
a
如果returnFirst
太长,你可以选择一个较短的名称,使代码更紧凑(例如a = sw(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);
这里有一个方法交换两个原始变量
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;
}
}
再次,虽然,我看不到有什么用的,这可能是
这回答了书面的问题 - 为什么downvote? – wonderer 2014-03-04 17:05:52
是有可能使用一种方法来交换两个变量。 但是,您应该使用空括号声明该方法,然后通过 参考(空圆括号)来调用它。 下面是一个例子,说明使用方法交换两个变量。
公共类交换
{
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 =苹果
//在通过引用原始值的情况下调用的,如果我们作出所调用的方法
变化改变这是一种交换类中两个变量值的方法,而不是作为参数传递的两个变量。调用不带参数的方法不是通过引用调用方法。 – 2018-02-27 08:06:48
我已经阅读了上面的答案,寻求一个解释,为什么说这个交换程序不能用C++编写的方式写在java中。 我做了以下方式 program screenshot
任何原始数字的一行:
a += (b - (b = a));
- 1. 是否可以编写一个创建方法的方法?
- 2. 是否可以重写Model.objects.all()方法?
- 3. 是否可以在Java中编写通用多路复用器?
- 4. 是否可以在Windows批处理或Java中编写Tee?
- 5. 是否可以在java中编写nginx模块?
- 6. 是否可以在jsp中使用Java编写JavaScript
- 7. 是否可以在JScheme中编写Java类?
- 8. 是否可以在PHP中编写'require_once'等替换项?
- 9. 是否可以在scilab中编写(显示)指数方程?
- 10. 是否可以在CoffeeScript中编写匿名平方函数?
- 11. 我可以在map-reduce中编写自定义java方法吗?
- 12. 是否可以为控制台编写扩展方法?
- 13. 是否可以为XAttribute和XElement编写一个方法?
- 14. 是否有可能在Java中重写String的compareTo方法?
- 15. 是否可以在Java上编写active-x组件?
- 16. 是否可以使用ArrayLists以Java编写队列和堆栈?
- 17. 是否可以编写App.PrevInstance替换以提供实时信息
- 18. 是否可以重写Android/dalvik中的Java类中的本地方法?
- 19. isEqualToString是否可以交换项目?
- 20. 是否可以在delphi中更改方法体(重写对象方法)?
- 21. 是否可以在C++中编写通用可变参数zipWith?
- 22. 是否可以编写Eclipse脚本?
- 23. 是否可以在C(而不是C++)中编写node.js扩展?
- 24. 在PL/SQL中编写java方法
- 25. 在java中编写Synthetic/Bridge方法
- 26. 如何在Java中编写checkStyle方法?
- 27. 如何在java printf方法中编写“%”
- 28. 是否可以在运行时重写一个方法?
- 29. QTP测试用例是否可以用Java编写?
- 30. 是否可以用Java编写NetLogo仿真程序?
清洁香港由基准掉这个out.More信息。 http://www.cs.utsa.edu/~wagner/CS2213/swap/swap.html Chk this out.More info on swap by reference。 – 2012-06-28 07:27:41