无聊的编程总有一些乐趣。今天我们不谈那些高深的技巧,而是教你一些编程的小技巧,说不定你有时间可以炫耀一下。1.在不使用ifelseswitch和三元运算符的情况下求最大值和最小值,在给定的三元组中求最大值和最小值:比如给定3,14,8,不使用ifelseswitch和findthe三元运算符情况下的最大值和最小值。话不多说,先看代码:publicstaticintfindMax(inta,intb,intc){intmax=a;布尔b1=(max0);b1=(max0);返回最大值;}publicstaticintfindMin(inta,intb,intc){intmin=a;布尔b1=(min>b)&&((min=b)>0);b1=(min>c)&&((min=c)>0);返回分钟;}这里主要利用了&&运算符的短路特性,即当&&只有前一个表达式为真时才会执行下一个表达式,当前表达式为假则不会执行下一个表达式。所以这里只有当前面的表达式为真时,才会执行后面的赋值语句。我们运行一下,结果如下:上面方法中的输入参数适合正负数。如果我们的输入参数可以确定为正数,我们也可以使用下面的方法来实现。publicstaticintfindPositiveMax(inta,intb,intc){intmax=0;while(a>0||b>0||c>0){a--;b--;C-;最大值++;}返回最大值;}publicstaticintfindPositiveMin(inta,intb,intc){intmin=0;while(a>0&&b>0&&c>0){a--;b--;C-;分钟++;}返回分钟;}上面的写法相信大家都看得懂,阿芬就简单的解释一下。同样,&&和||的短路特性这里也用到了操作,但是要注意这种形式只有在两者都是正数的情况下才能起作用。2.不要使用临时变量来交换变量。swap(x,y)操作大家都知道,就是交换x和y的值,比如x=3,y=4;交换操作后,x=4,y=3;我们这里的问题是如何在不使用临时变量的情况下只用一行代码来实现这个方法。首先大家肯定知道我们这里要用到异或操作^,没错,废话不多说,直接看代码:publicstaticvoidswapByXor(intx,inty){System.out.println(x+":"+y);x=x^y^(y=x);System.out.println(x+":"+y);}运行之后可以看到x和y的值已经互换了,这里我们需要知道两个知识点,那就是n^n=0;n^0=n,而a^b和b^a是等价的。当然,除了上面的异或,我们还可以实现下面的方法。publicstaticvoidswapByAddAndSub(intx,inty){System.out.println(x+":"+y);x=x+y-(y=x);System.out.println(x+":"+y);}publicstaticvoidswapByMulAndDiv(intx,inty){System.out.println(x+":"+y);x=(x*y)/(y=x);系统输出。println(x+":"+y);}这两个方法是一样的逻辑,先求和再减其中一个值和先乘再除以一个值,可以得到两个替换值。3、两个数相乘接下来我们再看一个,求两个数的乘积,但是乘号*不能用。在看代码之前,我们先来分析一下。比如我们要求3*5的乘积,我们可以把3*5看成3*4+3,即(3*3+3)+3。看到这里可能小伙伴已经知道我们是怎么做的了想要计算,对,就是我们可以用递归。publicstaticintmulWithoutMul(intx,inty){如果(y==0)return0;如果(y>0)返回(x+mulWithoutMul(x,y-1));返回-mulWithoutMul(x,-y);}通过上面的递归,我们可以不用乘号就可以将两个数相乘。4、不要用乘号来计算乘以15,如果我们要计算一个数乘以15,可以这样计算,(n<<4)-n,因为n*15=n*16-n=(n<<4)-n;同样,如果我们有时候想乘以2或者除以2,也可以换成移位操作,n*2=n<<1;n/2=n>>1,如果是4,就可以向左移动2位或向右移动2位,即n*4=n<<2;n/4=n>>2;等等。在某些极端情况下,使用移位可以提高性能。