当前位置: 首页 > 后端技术 > Java

教你几个Java编程中的窍门和窍门

时间:2023-04-01 22:20:49 Java

枯燥的编程总有一些乐趣。是时候炫耀了。1.不使用ifelseswitch和三元运算符求最大值和最小值,在给定的三元组中求最大值和最小值:比如给定3,14,8,不使用ifelseswitch和Find三元运算符情况下的最大值和最小值。话不多说,先看代码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+“:”+是);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);System.out.println(x+":"+y);}这两个方法是一样的逻辑,先求和再减其中一个值求和先乘后除以一个值得到两个替换值。3、两个数相乘接下来我们再看一个,求两个数的乘积,但是乘号*不能用。在看代码之前,我们先来分析一下。比如我们要求3*5的乘积,我们可以把3*5看成3*4+3,即(3*3+3)+3。看到这里可能小伙伴已经知道我们是怎么做的了想要计算,对,就是我们可以用递归。publicstaticintmulWithoutMul(intx,inty){如果(y==0)返回0;如果(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;等等。在某些极端情况下,使用移位可以提高性能。程序员必读清单