java中邏輯控制舉例具體講解
前言
在前面,我們對java進(jìn)行了一個(gè)簡單的概括,講解了它的數(shù)據(jù)類型和變量,操作符。這期文章我們將對java中的邏輯控制進(jìn)行具體的講解,敬請期待~
分支結(jié)構(gòu)
if語句
語法格式1
if(布爾表達(dá)式){
// 語句
}
在java中,如果布爾表達(dá)式結(jié)果為true,執(zhí)行if中的語句,否則不執(zhí)行
舉個(gè)栗子:如果阿三大于90歲就是長壽,否則就不是
int age = 95; if(age >= 90){ System.out.println("阿三活太久了吧"); }
語法格式2
if(
布爾表達(dá)式){
// 語句1
}else{
// 語句2
}
如果布爾表達(dá)式結(jié)果為true,則執(zhí)行if中語句,否則執(zhí)行else中語句。
舉個(gè)栗子:如果阿三大于90歲就是活太久了,否則就是短命鬼
int age = 95; if(age >= 90){ System.out.println("阿三活太久了吧"); }else { System.out.println("阿三是短命鬼"); }
語法格式3
if(
布爾表達(dá)式1){
// 語句1
}else if(布爾表達(dá)式2){
// 語句2
}else{
// 語句3
}
表達(dá)式1成立,執(zhí)行語句1,否則表達(dá)式2成立,執(zhí)行語句2,否則執(zhí)行語句3
舉個(gè)栗子:有一場學(xué)生的考試需要評估,分?jǐn)?shù)在 [90, 100] 之間的,為優(yōu)秀 分?jǐn)?shù)在 [80, 90) 之前的,為良好 分?jǐn)?shù)在 [70, 80) 之間的,為中等分?jǐn)?shù) 在 [60, 70) 之間的,為及格分?jǐn)?shù) 在 [ 0, 60) 之間的,為不及格 其他則為錯(cuò)誤數(shù)據(jù)
if( score >= 90){ System.out.println("優(yōu)秀"); }else if(score >= 80 && score < 90){ System.out.println("良好"); }else if(score >= 70 && score < 80){ System.out.println("中等"); }else if(score >= 60 && score < 70){ System.out.println("及格"); }else if(score >= 0 && score < 60){ System.out.println("不及格"); }else{ System.out.println("錯(cuò)誤數(shù)據(jù)"); }
注意:下面的代碼中,雖然兩種方式都是合法的, 但是 Java 中更推薦使用風(fēng)格1, 可千萬不要把C的代碼風(fēng)格帶到j(luò)ava中。
// 風(fēng)格1-----> 推薦 int x = 10; if (x == 10) { // 語句1 } else { // 語句2 } //風(fēng)格二 int x = 10; if (x == 10) { // 語句1 } e lse { // 語句2 }
大家在編寫代碼的時(shí)候,要注意千萬不能在括號后面出現(xiàn);下面的代碼就是案例,多寫了一個(gè) 分號, 導(dǎo)致分號成為了 if 語句的語句體, 而 { } 中的代碼已經(jīng)成為了和一個(gè) if 無關(guān)的代碼塊
int x = 20; if (x == 10); { System.out.println("hehe"); } / / 運(yùn)行結(jié)果 hehe
還有一個(gè)問題就是if / else 語句中可以不加 大括號 . 但是也可以寫語句(只能寫一條語句). 此時(shí) else 是和最接近的 if 匹配.但是實(shí)際開發(fā)中我們 不建議 這么寫. 最好加上大括號
int x = 10; int y = 10; if (x == 10) if (y == 10) System.out.println("aaa"); else System.out.println("bbb");
switch語句
語法
switch(表達(dá)式){ case 常量值1:{ 語句1; [break;] } case 常量值2:{ 語句2; [break;] } …… default:{ 內(nèi)容都不滿足時(shí)執(zhí)行語句; [break;] } }
它的過程:
1. 先計(jì)算表達(dá)式的值
2. 和case依次比較,一旦有響應(yīng)的匹配就執(zhí)行該項(xiàng)下的語句,直到遇到break時(shí)結(jié)束
3. 當(dāng)表達(dá)式的值沒有與所列項(xiàng)匹配時(shí),執(zhí)行default
舉個(gè)栗子:
int day = 1; switch(day) { case 1: System.out.println("星期一"); break; case 2: System.out.println("星期二"); break; case 3: System.out.println("星期三"); break; case 4: System.out.println("星期四"); break; case 5: System.out.println("星期五"); break; case 6: System.out.println("星期六"); break; case 7: System.out.println("星期日"); break; default: System.out.println("輸入有誤"); break; }
注意:
多個(gè)case后的常量值不可以重復(fù)
switch的括號內(nèi)只能是以下類型的表達(dá)式:
基本類型:byte、char、short、int,注意不能是long類型
引用類型:String常量串、枚舉類型
循環(huán)結(jié)構(gòu)
while循環(huán)
基本語法:
while(循環(huán)條件){ 循環(huán)語句; }
循環(huán)條件為 true, 則執(zhí)行循環(huán)語句; 否則結(jié)束循環(huán)
舉個(gè)栗子:
nt num = 1; while (num <= 10) { System.out.println(num); num++; }
注意:
1. 和 if 類似, while 下面的語句可以不寫 { } , 但是不寫的時(shí)候只能支持一條語句. 建議還是加上 { }
2. 和 if 類似, while 后面的 { 建議和 while 寫在同一行.
3. 和 if 類似, while 后面不要多寫 分號, 否則可能導(dǎo)致循環(huán)不能正確執(zhí)行.
int num = 1; while (num <= 10); { System.out.println(num); num++; }
這個(gè)時(shí)候 while 的語句體(這是一個(gè)空語句), 實(shí)際的 { } 部分和循環(huán)無關(guān). 此時(shí)循環(huán)條件 num <= 10 恒成立, 導(dǎo)致代碼死循環(huán)了
break
break 它是可以讓循環(huán)提前結(jié)束
舉個(gè)栗子:
nt num = 100; while (num <= 200) { if (num % 3 == 0) { System.out.println("找到了 3 的倍數(shù), 為:" + num); break; } n um++; }
代碼遇到了break就會跳出去,停止循環(huán)
continue
continue 的作用是跳過這次循環(huán), 立即進(jìn)入下次循環(huán)
舉個(gè)栗子:
int num = 100; while (num <= 200) { if (num % 3 != 0) { num++; // 這里的 ++ 不要忘記! 否則會死循環(huán). continue; } System.out.println("找到了 3 的倍數(shù), 為:" + num); num++; }
執(zhí)行到 continue 語句的時(shí)候, 就會立刻進(jìn)入下次循環(huán)從而不會執(zhí)行到下方的打印語句
for循環(huán)
基本語法
for(表達(dá)式①;布爾表達(dá)式②;表達(dá)式③){ 表達(dá)式④; }
表達(dá)式1: 用于初始化循環(huán)變量初始值設(shè)置,在循環(huán)最開始時(shí)執(zhí)行,且只執(zhí)行一次
表達(dá)式2: 循環(huán)條件,滿則循環(huán)繼續(xù),否則循環(huán)結(jié)束
表達(dá)式3: 循環(huán)變量更新方式
它的過程是:①②③④--->②③④--->②③④--->②③④--->②③④--->②③④--->...--->②為false,循環(huán)結(jié)束。
舉個(gè)栗子:
for (int i = 1; i <= 10; i++) { System.out.println(i); }
畫圖分析
注意:
1. 和 if 類似, for 下面的語句可以不寫 { } , 但是不寫的時(shí)候只能支持一條語句. 建議還是加上 { }
2. 和 if 類似, for 后面的 { 建議和 while 寫在同一行.
3. 和 if 類似, for 后面不要多寫 分號, 否則可能導(dǎo)致循環(huán)不能正確執(zhí)行.
4. 和while循環(huán)一樣,結(jié)束單趟循環(huán)用continue,結(jié)束整個(gè)循環(huán)用break
do while循環(huán)
基本語法
do{ 循環(huán)語句; }while(循環(huán)條件);
先執(zhí)行循環(huán)語句, 再判定循環(huán)條件,循環(huán)條件成立則繼續(xù)執(zhí)行,否則循環(huán)結(jié)束。
舉個(gè)栗子:
int num = 1; do { System.out.println(num); num++; } while (num <= 10);
注意:
1. do while 循環(huán)最后的分號不要忘記
2. 更推薦使用 for 和 while.
順序結(jié)構(gòu)
順序結(jié)構(gòu)就是按照代碼書寫的順序一行一行執(zhí)行。如果調(diào)整代碼的順序也會發(fā)生改變:
System.out.println("aaa"); System.out.println("bbb"); System.out.println("ccc"); // 運(yùn)行結(jié)果 aaa bbb ccc System.out.println("aaa"); System.out.println("ccc"); System.out.println("bbb"); // 運(yùn)行結(jié)果 aaa ccc bbb
輸入輸出
輸出到控制臺
基本語法:
System.out.println(msg);
System.out.print(msg);// 輸出一個(gè)字符串, 帶換行
// 輸出一個(gè)字符串, 不帶換行System.out.printf(format, msg); // 格式化輸出
println 輸出的內(nèi)容自帶 \n, print 不帶 \n
printf 的格式化輸出方式和 C 語言的 printf 是基本一致的.
舉個(gè)栗子:
System.out.println("hello world"); int x = 10; System.out.printf("x = %d\n", x)
從鍵盤輸入
使用 Scanner 讀取字符串/整數(shù)/浮點(diǎn)數(shù)
import java.util.Scanner; // 需要導(dǎo)入 util 包 Scanner sc = new Scanner(System.in); System.out.println("請輸入你的姓名:"); String name = sc.nextLine(); System.out.println("請輸入你的年齡:"); int age = sc.nextInt(); System.out.println("請輸入你的工資:"); float salary = sc.nextFloat(); System.out.println("你的信息如下:"); System.out.println("姓名: "+name+"\n"+"年齡:"+age+"\n"+"工資:"+salary); sc.close(); // 注意, 要記得調(diào)用關(guān)閉方法 // 執(zhí)行結(jié)果 請輸入你的姓名: 張三 請輸入你的年齡: 18 請輸入你的工資: 1000 你的信息如下: 姓名: 張三 年齡:18 工資:1000.0
當(dāng)循環(huán)輸入多個(gè)數(shù)據(jù)的時(shí)候, 使用 ctrl + z 來結(jié)束輸入 (Windows 上使用 ctrl + z, Linux / Mac 上使用 ctrl+ d).
猜數(shù)字游戲
這里通過上面的知識給大家實(shí)現(xiàn)一個(gè)猜數(shù)字游戲,這個(gè)代碼在之前的博客用C也詳細(xì)講過一遍,這里就直接上代碼了:
import java.util.Random; import java.util.Scanner;; class Test { public static void main(String[] args) { Random random = new Random(); // 默認(rèn)隨機(jī)種子是系統(tǒng)時(shí)間 Scanner sc = new Scanner(System.in); int toGuess = random.nextInt(100); // System.out.println("toGuess: " + toGuess); while (true) { System.out.println("請輸入要輸入的數(shù)字: (1-100)"); int num = sc.nextInt(); if (num < toGuess) { System.out.println("猜小了"); } else if (num > toGuess) { System.out.println("猜大了"); } else { System.out.println("恭喜你,猜對了"); break; } } s c.close(); } }
附:接下來咱們用這三種循環(huán)來完成,計(jì)算10!的結(jié)果
while循環(huán)
long result = 1; int i = 1; while (i<=10){ result *= i; i++; } System.out.println(result);
do……while循環(huán)
long result = 1; int i = 1; do { result *= i; i++; }while (i<=10); System.out.println(result);
for循環(huán)
long result = 1; for (int i = 1; i <= 10; i++) { result*=i; } System.out.println(result);
以上結(jié)果均為3628800
總結(jié)
到此這篇關(guān)于java中邏輯控制的文章就介紹到這了,更多相關(guān)java邏輯控制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java?Ribbon與openfeign區(qū)別和用法講解
Ribbon是基于Netflix?Ribbon實(shí)現(xiàn)的一套客戶端負(fù)載均衡的工具,主要功能是提供客戶端的軟件負(fù)載均衡算法和服務(wù)調(diào)用。openfeign對Feign進(jìn)行了增強(qiáng),使其支持Spring MVC注解,另外還整合了Ribbon和Nacos,從而使得Feign的使用更加方便2022-08-08IntelliJ IDEA優(yōu)化配置的實(shí)現(xiàn)
這篇文章主要介紹了IntelliJ IDEA優(yōu)化配置的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07Mybatis中Mapper標(biāo)簽總結(jié)大全
這篇文章主要介紹了Mybatis中Mapper標(biāo)簽總結(jié)大全,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06詳解Spring bean的注解注入之@Autowired的原理及使用
之前講過bean注入是什么,也使用了xml的配置文件進(jìn)行bean注入,這也是Spring的最原始的注入方式(xml注入).本文主要講解的注解有以下幾個(gè):@Autowired、 @Service、@Repository、@Controller 、@Component、@Bean、@Configuration、@Resource ,需要的朋友可以參考下2021-06-06Java中ArrayList與順序表的概念與使用實(shí)例
順序表是指用一組地址連續(xù)的存儲單元依次存儲各個(gè)元素,使得在邏輯結(jié)構(gòu)上相鄰的數(shù)據(jù)元素存儲在相鄰的物理存儲單元中的線性表,下面這篇文章主要介紹了Java?ArrayList與順序表的相關(guān)資料,需要的朋友可以參考下2022-01-01idea導(dǎo)入springboot項(xiàng)目沒有maven的解決
這篇文章主要介紹了idea導(dǎo)入springboot項(xiàng)目沒有maven的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04Mybatis-plus?代碼生成器?AutoGenerator?的簡介和使用詳解
AutoGenerator是MyBatis-Plus的代碼生成器,通過AutoGenerator可以快速生成?Entity、Mapper、Mapper XML、Service、Controller等各個(gè)模塊的代碼,極大的提升了開發(fā)效率,這篇文章主要介紹了Mybatis-plus代碼生成器AutoGenerator的簡介和使用,需要的朋友可以參考下2023-05-05java多線程編程之Synchronized關(guān)鍵字詳解
這篇文章主要為大家詳細(xì)介紹了java多線程編程之Synchronized關(guān)鍵字,感興趣的朋友可以參考一下2016-05-05