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