佚名通过本文主要向大家介绍了用java写猜数字游戏,java判断是否是数字,java 判断是否为数字,java从键盘输入数字,java字符串转换为数字等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:java如何写2个数字交换
描述:
解决方案1:
描述:
刚学java 在网上也搜过 但是答案不太满意 求牛人指教
解决方案1:
我猜测你想说的是,Java这种没有“指针”或者“引用”的语言,怎么写C++里面的swap函数:
template<class T> void swap(T& a, T& b) { T tmp(a); a = b; b = tmp; }
Java里面的primitive type(boolean, double, float, int, byte, char, long, etc.)都是pass by value(事实上我个人比较喜欢认为Java只支持pass by value,只不过所有的Object都是pass by value of the reference,所以说你在函数里面修改Object型参数的引用不会影响caller和环境,因为Object reference也是copy的),所以如果你要交换primitive type的值,不能只用函数和传参,要用一个Wrapper Object。
以下是一个例子,没有任何意义,只是为了展示你可以这么做,但是……可以这么做不代表你应该这么做。
public final class SwapExample { public static void main(String[] args) { Integer a = 1; Integer b = 2; final Swap<Integer> s = new Swap<Integer>(a, b); a = s.getA(); b = s.getB(); System.out.println("a: " + a + ", b: " + b); } static class Swap<T> { private final T a; private final T b; public Swap(T a, T b) { this.a = b; this.b = a; } public T getA() { return a; } public T getB() { return b; } } }解决方案2:
位运算交换只能用于整型操作数
解决方案3:数值交换,常见的方法就是用中间变量喽
c = a; a = b; b = c;
还有另一种种方法
a = a + b; b = a - b; a = a - b;解决方案4:
还有一种是异或操作
public class TwoCups { static public void main(String []args) { int a = 2; int b = 9; a = a ^ b; b = b ^ a; // b ^ a ^ b a = a ^ b; // a ^ b ^ a System.out.println(a + " -- " + b); } }