教你幾個(gè)?Java?編程中使用技巧
1、找到最大值和最小值
不使用 if else switch 和三元運(yùn)算符,在給定的三元組中找到最大值和最小值:比如給定 3,14,8,在不使用 if else switch 和三元運(yùn)算符的情況下找到最大值和最小值。
話不多說,我們先看代碼
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;
}
這里我們主要使用了&& 運(yùn)算符的短路特性,短路特性是指當(dāng) && 前一個(gè)表達(dá)式為 true 的時(shí)候才會(huì)繼續(xù)執(zhí)行下一個(gè)表達(dá)式,當(dāng)前一個(gè)表達(dá)式為 false 則不會(huì)執(zhí)行下一個(gè)表達(dá)式。所以在這里只有當(dāng)前一個(gè)表達(dá)式為 true 的時(shí)候,后面的賦值語句才會(huì)被執(zhí)行到。
我們運(yùn)行一下結(jié)果如下

上面的這種方式入?yún)⑦m合正數(shù)和負(fù)數(shù),如果當(dāng)我們的入?yún)⒛艽_定為正數(shù)的時(shí)候,我們還可以使用下面的這種方式來實(shí)現(xiàn)
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;
}
上面的這種寫法相信大家都能看懂,阿粉就不過的解釋了,同樣的這里也利用了&& 和 || 運(yùn)算的短路特性,不過要注意這種形式只能在都是正數(shù)的情況下才可以。
2、不使用臨時(shí)變量交換變量
swap(x, y) 操作大家都知道,就是交互 x 和 y 的值,比如 x = 3, y = 4; 在經(jīng)過 swap 操作過后,x = 4,y = 3;我們這里的問題時(shí)如何在不使用臨時(shí)變量的情況下,只有一行代碼來實(shí)現(xiàn)這個(gè)方法。
首先大家肯定知道這里我們要使用異或運(yùn)算^,沒錯(cuò),話不多說我們看代碼
public static void swapByXor(int x, int y) {
System.out.println(x + ":" + y);
x = x ^ y ^ (y = x);
System.out.println(x + ":" + y);
}

運(yùn)行過后,可以看到,x 和 y 的值已經(jīng)被交換了, 這里我們要知道兩個(gè)知識(shí)點(diǎn),那就是 n ^ n = 0; n ^ 0 = n,另外a ^ b 和 b ^ a是等價(jià)的。

當(dāng)然除了上面的異或之外,我們還可以通過下面這種方法來實(shí)現(xiàn)
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);
}
這兩種方式都是同樣的邏輯,先求和在減去其中一個(gè)值和先求積再除以一個(gè)值,就可以得到兩個(gè)替換后的值。
3、兩個(gè)數(shù)相乘
接下來我們?cè)倏匆粋€(gè),求兩個(gè)數(shù)的積,但是不能用乘號(hào)*。在看代碼之前,我們先分析一下,比如說我們要求積 3 * 5 可以將 3 * 5 看成 3 * 4 + 3,也就是 (3 * 3 + 3) + 3,看到這個(gè)可能有的小伙伴已經(jīng)知道我們要怎么計(jì)算了,沒錯(cuò),那就是我們可以用遞歸。
public static int mulWithoutMul(int x, int y) {
if (y == 0)
return 0;
if (y > 0)
return (x + mulWithoutMul(x, y - 1));
return -mulWithoutMul(x, -y);
}
通過上面的遞歸,我們就可以實(shí)現(xiàn)兩個(gè)數(shù)相乘但是沒有使用乘號(hào)了。

4、不使用乘號(hào)計(jì)算乘以 15
如果我們要計(jì)算一個(gè)數(shù)乘以 15 的時(shí)候,我們可以通過下面這種方式來計(jì)算,(n << 4) - n, 因 n * 15 = n * 16 - n = (n << 4) - n;同樣的如果我們某些時(shí)候要計(jì)算乘以 2 或者除以 2 的時(shí)候,我們也可以換成移位操作,n * 2 = n << 1;n / 2 = n >> 1,如果是 4 的話就可以左移 2 位或者右移 2 位,即 n * 4 = n << 2;n / 4 = n >> 2;一次類推。
使用移位的方式,在某些極端的場(chǎng)景可以提升性能。
到此這篇關(guān)于教你幾個(gè) Java 編程中使用技巧的文章就介紹到這了,更多相關(guān)Java 編程使用技巧內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot框架實(shí)現(xiàn)切換啟動(dòng)開發(fā)環(huán)境和測(cè)試環(huán)境
這篇文章主要介紹了SpringBoot框架實(shí)現(xiàn)切換啟動(dòng)開發(fā)環(huán)境和測(cè)試環(huán)境,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
idea無法打斷點(diǎn),單擊或雙擊代碼行左側(cè)區(qū)域無效的解決
這篇文章主要介紹了idea無法打斷點(diǎn),單擊或雙擊代碼行左側(cè)區(qū)域無效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
前端發(fā)送的請(qǐng)求Spring如何返回一個(gè)文件詳解
這篇文章主要給大家介紹了關(guān)于前端發(fā)送的請(qǐng)求Spring如何返回一個(gè)文件的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-09-09
IKAnalyzer結(jié)合Lucene實(shí)現(xiàn)中文分詞(示例講解)
下面小編就為大家?guī)硪黄狪KAnalyzer結(jié)合Lucene實(shí)現(xiàn)中文分詞(示例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10
IntelliJ?IDEA設(shè)置JVM運(yùn)行參數(shù)的圖文介紹
這篇文章主要介紹了IntelliJ?IDEA設(shè)置JVM運(yùn)行參數(shù)的方法,包括配置方式及優(yōu)先級(jí),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04
java多線程數(shù)據(jù)分頁處理實(shí)例講解
在本篇內(nèi)容里小編給大家分享了一篇關(guān)于java多線程數(shù)據(jù)分頁處理實(shí)例講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-01-01
SpringBoot 2.0 整合sharding-jdbc中間件實(shí)現(xiàn)數(shù)據(jù)分庫分表
這篇文章主要介紹了SpringBoot 2.0 整合sharding-jdbc中間件,實(shí)現(xiàn)數(shù)據(jù)分庫分表,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-06-06

