JAVASE精密邏輯控制過(guò)程詳解(分支和循環(huán)語(yǔ)句)
1.順序結(jié)構(gòu)
順序結(jié)構(gòu)
比較簡(jiǎn)單
System.out.println("aaa"); System.out.println("bbb"); System.out.println("ccc"); // 運(yùn)行結(jié)果 aaa bbb ccc
按照代碼書(shū)寫(xiě)的順序一行一行執(zhí)行, 如果調(diào)整代碼的書(shū)寫(xiě)順序 , 則執(zhí)行順序也發(fā)生變化。
2.分支結(jié)構(gòu)
2.1 if 語(yǔ)句
1. 語(yǔ)法格式 1
單分支
if(布爾表達(dá)式){ // 語(yǔ)句 }
2. 語(yǔ)法格式 2
雙分支
if(布爾表達(dá)式){ // 語(yǔ)句1 }else{ // 語(yǔ)句2 }
如果布爾表達(dá)式結(jié)果為 true ,則執(zhí)行 if 中語(yǔ)句,否則執(zhí)行 else 中語(yǔ)句。
案例:
比如:小明,如果這次考到 90 分以上,給你獎(jiǎng)勵(lì)一個(gè)大雞腿,否則獎(jiǎng)你一個(gè)大嘴巴子。
int score = 92; if(score >= 90){ System.out.println("吃個(gè)大雞腿!!!"); }else{ System.out.println("挨大嘴巴子!!!"); }
3. 語(yǔ)法格式 3
多分支
if(布爾表達(dá)式1){ // 語(yǔ)句1 }else if(布爾表達(dá)式2){ // 語(yǔ)句2 }else{ // 語(yǔ)句3 }
案例:
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ù)"); }
【注意事項(xiàng)】
這里代碼風(fēng)格和c語(yǔ)言不一樣。
JAVA風(fēng)格:
int x = 10 ;
if ( x == 10 ) {
// 語(yǔ)句 1
} else {
// 語(yǔ)句 2
}
懸垂 else 問(wèn)題
if / else 語(yǔ)句中可以不加 大括號(hào) . 但是也可以寫(xiě)語(yǔ)句 ( 只能寫(xiě)一條語(yǔ)句 ). 此時(shí) else 是和最接近的 if 匹配 .但是實(shí)際開(kāi)發(fā)中我們 不建議 這么寫(xiě) . 最好加上大括號(hào) .
2.2 switch 語(yǔ)句
基本語(yǔ)法
switch ( 表達(dá)式 ){
case 常量值 1 :{
語(yǔ)句1 ;
[ break ;]
}
case 常量值 2 :{
語(yǔ)句2 ;
[ break ;]
}
default :{
內(nèi)容都不滿(mǎn)足時(shí)執(zhí)行語(yǔ)句 ;
[ break ;]
}
}
執(zhí)行流程:
1. 先計(jì)算表達(dá)式的值
2. 和 case 依次比較,一旦有響應(yīng)的匹配就執(zhí)行該項(xiàng)下的語(yǔ)句,直到遇到 break 時(shí)結(jié)束
3. 當(dāng)表達(dá)式的值沒(méi)有與所列項(xiàng)匹配時(shí),執(zhí)行 default
和c語(yǔ)言一樣但是switch后面括號(hào)里面不能是浮點(diǎn)型和布爾類(lèi)型和long類(lèi)型
案例:根據(jù) day 的值輸出星期
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; }
【注意事項(xiàng)】
多個(gè)case后的常量值不可以重復(fù)
switch的括號(hào)內(nèi)只能是以下類(lèi)型的表達(dá)式:
基本類(lèi)型:byte 、 char 、 short 、 int ,注意不能是 long類(lèi)型
引用類(lèi)型:String 常量串、枚舉類(lèi)型
案例:
double num = 1.0; switch(num) { case 1.0: System.out.println("hehe"); break; case 2.0: System.out.println("haha"); break; } // 編譯出錯(cuò) Test.java:4: 錯(cuò)誤: 不兼容的類(lèi)型: 從double轉(zhuǎn)換到int可能會(huì)有損失 switch(num) { ^ 1 個(gè)錯(cuò)誤
break 不要遺漏, 否則會(huì)失去 "多分支選擇" 的效果
案例:
int day = 1; switch(day) { case 1: System.out.println("星期一"); // break; case 2: System.out.println("星期二"); break; } // 運(yùn)行結(jié)果 星期一 星期二
switch 雖然支持嵌套, 但是很丑,一般不推薦~
3.循環(huán)結(jié)構(gòu)
3.1while 循環(huán)
基本語(yǔ)法格式:
while ( 循環(huán)條件 ){
循環(huán)語(yǔ)句 ;
}
循環(huán)條件為 true, 則執(zhí)行循環(huán)語(yǔ)句; 否則結(jié)束循環(huán). 與c一樣相同。
案例1:
打印 1 - 10 的數(shù)字
代碼 :
int num = 1; while (num <= 10) { System.out.println(num); num++; }
當(dāng)一個(gè)代碼中帶有多重循環(huán)的時(shí)候 , 代碼的復(fù)雜程度就大大提高了 . 而比較復(fù)雜的代碼就更容易出錯(cuò) .后面我們會(huì)采用更簡(jiǎn)單的辦法來(lái)解決這個(gè)問(wèn)題。
注意事項(xiàng)
1. 和 if 類(lèi)似 , while 下面的語(yǔ)句可以不寫(xiě) { } , 但是不寫(xiě)的時(shí)候只能支持一條語(yǔ)句 . 建議還是加上 { }
2. 和 if 類(lèi)似 , while 后面的 { 建議和 while 寫(xiě)在同一行 .
3. 和 if 類(lèi)似 , while 后面不要多寫(xiě) 分號(hào) , 否則可能導(dǎo)致循環(huán)不能正確執(zhí)行
3.2 for 循環(huán)
【 基本語(yǔ)法 】
for ( 表達(dá)式① ; 布爾表達(dá)式② ; 表達(dá)式③ ){
表達(dá)式④ ;
}
執(zhí)行過(guò)程:
表達(dá)式 1: 用于初始化循環(huán)變量初始值設(shè)置,在循環(huán)最開(kāi)始時(shí)執(zhí)行,且只執(zhí)行一次
表達(dá)式 2: 循環(huán)條件,滿(mǎn)則循環(huán)繼續(xù),否則循環(huán)結(jié)束
表達(dá)式 3: 循環(huán)變量更新方式
【執(zhí)行過(guò)程】
①②③④--->②③④--->②③④--->②③④--->②③④--->②③④--->...--->②為false,循環(huán)結(jié)束。
計(jì)算 5 的階乘
int result = 1; for (int i = 1; i <= 5; i++) { result *= i; } System.out.println("result = " + result);
【注意事項(xiàng)】 (和while循環(huán)類(lèi)似)
1. 和 if 類(lèi)似 , for 下面的語(yǔ)句可以不寫(xiě) { } , 但是不寫(xiě)的時(shí)候只能支持一條語(yǔ)句 . 建議還是加上 { }
2. 和 if 類(lèi)似 , for 后面的 { 建議和 while 寫(xiě)在同一行 .
3. 和 if 類(lèi)似 , for 后面不要多寫(xiě) 分號(hào) , 否則可能導(dǎo)致循環(huán)不能正確執(zhí)行 .
4. 和 while 循環(huán)一樣,結(jié)束單趟循環(huán)用 continue ,結(jié)束整個(gè)循環(huán)用 break
案例:
打印 1 - 10
int num = 1; do { System.out.println(num); num++; } while (num <= 10);
3.3 do while 循環(huán)(選學(xué))
特點(diǎn):一定會(huì)執(zhí)行一次。
【基本語(yǔ)法】
do {
循環(huán)語(yǔ)句 ;
} while ( 循環(huán)條件 );
先執(zhí)行循環(huán)語(yǔ)句, 再判定循環(huán)條件,循環(huán)條件成立則繼續(xù)執(zhí)行,否則循環(huán)結(jié)束。
注意:
1. do while 循環(huán)最后的分號(hào)不要忘記
2. 一般 do while 很少用到 , 更推薦使用 for 和 while.
4 break
break 的功能是讓循環(huán)提前結(jié)束.
代碼示例: 找到 100 - 200 中第一個(gè) 3 的倍數(shù)
代碼:
int num = 100; while (num <= 200) { if (num % 3 == 0) { System.out.println("找到了 3 的倍數(shù), 為:" + num); break; } num++; } // 執(zhí)行結(jié)果 //找到了 3 的倍數(shù), 為:102
執(zhí)行到 break 就會(huì)讓循環(huán)結(jié)束。
5. continue
continue 的功能是跳過(guò)這次循環(huán), 立即進(jìn)入下次循環(huán).
代碼示例 : 找到 100 - 200 中所有 3 的倍數(shù)
代碼:
int num = 100; while (num <= 200) { if (num % 3 != 0) { num++; // 這里的 ++ 不要忘記! 否則會(huì)死循環(huán). continue; } System.out.println("找到了 3 的倍數(shù), 為:" + num); num++; }
執(zhí)行到 continue 語(yǔ)句的時(shí)候 , 就會(huì)立刻進(jìn)入下次循環(huán) ( 判定循環(huán)條件 ), 從而不會(huì)執(zhí)行到下方的打印語(yǔ)句。
6.輸出到控制臺(tái)
基本語(yǔ)法:
- System . out . println ( msg ); // 輸出一個(gè)字符串 , 帶換行
- System . out . print ( msg ); // 輸出一個(gè)字符串 , 不帶換行
- System . out . printf ( format , msg ); // 格式化輸出
println 輸出的內(nèi)容自帶 \n, print 不帶 \n
printf 的格式化輸出方式和 C 語(yǔ)言的 printf 是基本一致的。
6.1格式化字符串
轉(zhuǎn)換符 | 類(lèi)型 | 舉例 | 效果 |
d | 十進(jìn)制整數(shù) | ("%d", 100) | 100 |
x | 十六進(jìn)制整數(shù) | ("%x", 100) | 64 |
o | 八進(jìn)制整數(shù) | ("%o", 100) | 144 |
f | 定點(diǎn)浮點(diǎn)數(shù) | ("%f", 100f) | 100.000000 |
e | 指數(shù)浮點(diǎn)數(shù) | ("%e", 100f) | 1.000000e+02 |
g | 通用浮點(diǎn)數(shù) | ("%g", 100f) | 100.000 |
a | 十六進(jìn)制浮點(diǎn)數(shù) | ("%a", 100) | 0x1.9p6 |
s | 字符串 | ("%s", 100) | 100 |
c | 字符 | ("%c", ‘1’) | 1 |
b | 布爾值 | ("%b", 100) | true |
h | 散列碼 | ("%h", 100) | 64 |
% | 百分號(hào) | ("%.2f%%", 2/7f) | 0.29% |
這個(gè)表格沒(méi)必要記住, 用到的時(shí)候根據(jù)需要查一下就行了.
7.從鍵盤(pán)輸入
使用 Scanner 讀取字符串 / 整數(shù) / 浮點(diǎn)數(shù)
案例:
import java.util.Scanner; // 需要導(dǎo)入 util 包 Scanner sc = new Scanner(System.in); System.out.println("請(qǐng)輸入你的姓名:"); String name = sc.nextLine(); System.out.println("請(qǐng)輸入你的年齡:"); int age = sc.nextInt(); System.out.println("請(qǐng)輸入你的工資:"); float salary = sc.nextFloat(); System.out.println("你的信息如下:"); System.out.println("姓名: "+name+"\n"+"年齡:"+age+"\n"+"工資:"+salary); sc.close(); // 注意, 要記得調(diào)用關(guān)閉方法
輸出結(jié)果:
請(qǐng)輸入你的姓名:
張三
請(qǐng)輸入你的年齡:
18
請(qǐng)輸入你的工資:
1000
你的信息如下:
姓名 : 張三
年齡: 18
工資: 100
使用 Scanner 循環(huán)讀取 N 個(gè)數(shù)字,并求取其平均值(重點(diǎn))
代碼:
Scanner sc = new Scanner(System.in); int sum = 0; int num = 0; while (sc.hasNextInt()) { int tmp = sc.nextInt(); sum += tmp; num++; } System.out.println("sum = " + sum); System.out.println("avg = " + sum / num); sc.close();//關(guān)閉new打開(kāi)的類(lèi)
執(zhí)行結(jié)果;
// 執(zhí)行結(jié)果
10
40.0
50.5
^Z
sum = 150.5
avg = 30.1
注意事項(xiàng) : 當(dāng)循環(huán)輸入多個(gè)數(shù)據(jù)的時(shí)候 , 使用 ctrl + z 來(lái)結(jié)束輸入 (Windows 上使用 ctrl + z, Linux / Mac 上使用 ctrl + d).
在后續(xù) oj 題當(dāng)中,遇到 IO 類(lèi)型的算法題,有各種循環(huán)輸入的要求,后序給大家介紹。
8. 猜數(shù)字游戲
游戲規(guī)則 :
系統(tǒng)自動(dòng)生成一個(gè)隨機(jī)整數(shù) (1-100), 然后由用戶(hù)輸入一個(gè)猜測(cè)的數(shù)字 . 如果輸入的數(shù)字比該隨機(jī)數(shù)小 , 提示 " 低了", 如果輸入的數(shù)字比該隨機(jī)數(shù)大 , 提示 " 高了 " , 如果輸入的數(shù)字和隨機(jī)數(shù)相等 , 則提示 " 猜對(duì)了 " .
代碼:
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("請(qǐng)輸入要輸入的數(shù)字: (1-100)"); int num = sc.nextInt(); if (num < toGuess) { System.out.println("低了"); } else if (num > toGuess) { System.out.println("高了"); } else { System.out.println("猜對(duì)了"); break; } } sc.close(); } }
總結(jié)
到此這篇關(guān)于JAVASE精密邏輯控制的文章就介紹到這了,更多相關(guān)JAVASE精密邏輯控制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot 基于Tomcat容器的自啟動(dòng)流程分析
這篇文章主要介紹了springboot 基于Tomcat容器的自啟動(dòng)流程分析,Spring通過(guò)注解導(dǎo)入Bean大體可分為四種方式,我們主要來(lái)說(shuō)Import的兩種實(shí)現(xiàn)方法,需要的朋友可以參考下2020-02-02Spring注解驅(qū)動(dòng)之@EventListener注解使用方式
這篇文章主要介紹了Spring注解驅(qū)動(dòng)之@EventListener注解使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09Springboot FeignClient調(diào)用Method has too m
本文主要介紹了Springboot FeignClient微服務(wù)間調(diào)用Method has too many Body parameters 解決,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12springboot中使用Hibernate-Validation校驗(yàn)參數(shù)詳解
這篇文章主要為大家介紹了springboot中使用Hibernate-Validation校驗(yàn)參數(shù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07java關(guān)于并發(fā)模型中的兩種鎖知識(shí)點(diǎn)詳解
在本篇文章了小編給大家整理的是一篇關(guān)于java關(guān)于并發(fā)模型中的兩種鎖知識(shí)點(diǎn)詳解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-04-04很簡(jiǎn)單的Java斷點(diǎn)續(xù)傳實(shí)現(xiàn)原理
這篇文章主要以實(shí)例的方式為大家詳細(xì)介紹了簡(jiǎn)單的Java斷點(diǎn)續(xù)傳實(shí)現(xiàn)原理,感興趣的小伙伴們可以參考一下2016-07-07SpringBoot整合SpringSecurity認(rèn)證與授權(quán)
在項(xiàng)目開(kāi)發(fā)中,權(quán)限認(rèn)證是很重要的,尤其是一些管理類(lèi)的系統(tǒng),對(duì)于權(quán)限要求更為嚴(yán)格,本文主要介紹了SpringBoot整合SpringSecurity認(rèn)證與授權(quán),感興趣的可以了解一下2023-11-11