成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

教你幾個 Java 中的技巧,你會幾個?

開發 前端
swap(x, y) 操作大家都知道,就是交互 x 和 y 的值,比如 x = 3, y = 4; 在經過 swap 操作過后,x = 4,y = 3;我們這里的問題是如何在不使用臨時變量的情況下,只有一行代碼來實現這個方法。

枯燥的編程中總得有些樂趣,今天我們不談論那些高深的技能,教你幾個在編程中的奇技淫巧,說不定在某些時候還能炫耀一番呢。

1.找到最大值和最小值

不使用 if else switch 和三元運算符,在給定的三元組中找到最大值和最小值:比如給定 3,14,8,在不使用 if else switch 和三元運算符的情況下找到最大值和最小值。

話不多說,我們先看代碼:

public static int findMax(int a, int b, int c) {
int max = a;
boolean b1 = (max < b) && ((max = b) > 0);
b1 = (max < c) && ((max = c) > 0);
return max;
}

public static int findMin(int a, int b, int c) {
int min = a;
boolean b1 = (min > b) && ((min = b) > 0);
b1 = (min > c) && ((min = c) > 0);
return min;
}

這里我們主要使用了&& 運算符的短路特性,短路特性是指當 && 前一個表達式為 true 的時候才會繼續執行下一個表達式,當前一個表達式為 false 則不會執行下一個表達式。所以在這里只有當前一個表達式為 true 的時候,后面的賦值語句才會被執行到。

我們運行一下結果如下:

上面的這種方式入參適合正數和負數,如果當我們的入參能確定為正數的時候,我們還可以使用下面的這種方式來實現。

public static int findPositiveMax(int a, int b, int c) {
int max = 0;
while (a > 0 || b > 0 || c > 0) {
a--;
b--;
c--;
max++;
}
return max;
}

public static int findPositiveMin(int a, int b, int c) {
int min = 0;
while (a > 0 && b > 0 && c > 0) {
a--;
b--;
c--;
min++;
}
return min;
}

上面的這種寫法相信大家都能看懂,阿粉就不過的解釋了,同樣的這里也利用了&&和 || 運算的短路特性,不過要注意這種形式只能在都是正數的情況下才可以。

2.不使用臨時變量交換變量

swap(x, y) 操作大家都知道,就是交互 x 和 y 的值,比如 x = 3, y = 4; 在經過 swap 操作過后,x = 4,y = 3;我們這里的問題是如何在不使用臨時變量的情況下,只有一行代碼來實現這個方法。

首先大家肯定知道這里我們要使用異或運算^,沒錯,話不多說我們看代碼:

public static void swapByXor(int x, int y) {
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 是等價的。

當然除了上面的異或之外,我們還可以通過下面這種方法來實現。

public static void swapByAddAndSub(int x, int y) {
System.out.println(x + ":" + y);
x = x + y - (y = x);
System.out.println(x + ":" + y);
}

public static void swapByMulAndDiv(int x, int y) {
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,看到這個可能有的小伙伴已經知道我們要怎么計算了,沒錯,那就是我們可以用遞歸。

public static int mulWithoutMul(int x, int y) {
if (y == 0)
return0;
if (y > 0)
return (x + mulWithoutMul(x, y - 1));
return -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;一次類推。

使用移位的方式,在某些極端的場景可以提升性能。

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2021-11-29 11:11:45

SQL查詢技巧

2009-06-17 15:38:57

java軟件安裝

2022-11-16 09:04:36

SQL查詢SELECT

2022-07-18 08:08:16

Go?語言技巧

2021-03-12 10:12:09

etState函數React

2021-06-01 05:16:49

前端開發技術熱點

2020-02-23 23:29:07

Python編程開發

2019-04-15 13:24:31

2019-10-30 16:03:48

JavaJava虛擬機數據庫

2023-11-23 10:21:37

2019-11-22 09:30:59

設計Java程序員

2020-04-07 08:51:25

CCNP協議網絡協議路由

2022-09-15 07:05:09

Windows電腦技巧

2013-06-03 10:02:53

WAF繞過

2024-02-19 08:07:31

Go版本語言

2025-03-25 10:49:13

2019-07-25 10:45:05

GitHub技巧網站

2022-09-06 08:07:24

SQL語句查詢

2024-10-28 13:18:54

2011-07-05 14:59:17

java
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲 中文 欧美 日韩 在线观看 | 欧美一区二区三区,视频 | 国产综合网址 | 国产日韩欧美一区二区在线播放 | 国产伦精品一区二区三区精品视频 | 日韩在线中文字幕 | 中文字幕一区二区三区不卡 | 日韩欧美一区二区三区免费看 | 精品久久久久久久久久 | 亚洲精彩视频在线观看 | 黄色片大全在线观看 | www.久久艹 | 精品国产一区二区三区性色 | 国产xxxx岁13xxxxhd| 亚洲手机视频在线 | 日韩欧美理论片 | 免费观看av | 国产探花在线观看视频 | 一级毛片在线播放 | 三级特黄特色视频 | 成人妇女免费播放久久久 | av网站免费 | 91欧美 | 九九综合九九 | 国产视频h | 婷婷在线网站 | 亚洲一区中文字幕 | 巨大荫蒂视频欧美另类大 | 日韩二三区 | 九九久久久 | 国产精品国产三级国产aⅴ入口 | 天堂视频免费 | 黑人巨大精品欧美黑白配亚洲 | 黄网站涩免费蜜桃网站 | 国产探花| 2018天天干天天操 | 欧美亚洲在线视频 | 日日日日操 | 国产激情网站 | 日本国产精品视频 | 亚洲精品欧美一区二区三区 |