Java之邏輯控制三大結(jié)構(gòu)使用及說明
邏輯控制分為三部分,分別為順序執(zhí)行,選擇執(zhí)行以及循環(huán)執(zhí)行
一、順序執(zhí)行(順序結(jié)構(gòu))
即順序執(zhí)行代碼,這部分沒有什么特別要說的就簡(jiǎn)單概括一下
順序執(zhí)行是java中的默認(rèn)執(zhí)行程序,有代碼編寫順序決定執(zhí)行流程,說人話就是從上到下,從左到右依次按順序運(yùn)行(沒有特殊控制結(jié)構(gòu)的前提下)
那么,何為特殊控制結(jié)構(gòu)呢?
特殊控制結(jié)構(gòu)有分支,循環(huán),線程等,接下來我會(huì)詳細(xì)分析這些
二、選擇執(zhí)行 (分支結(jié)構(gòu)) if switch
1.if 語句
語法格式1
if(布爾表達(dá)式){
// 語句
}語法格式2
if(布爾表達(dá)式){
// 語句1
}else{
// 語句2
}語法格式3
if(布爾表達(dá)式1){
// 語句1
}else if(布爾表達(dá)式2){
// 語句2
}else{
// 語句3
}2.練習(xí)
1.判斷一個(gè)數(shù)字是奇數(shù)還是偶數(shù)
int num = 10;
if (num % 2 == 0) {
System.out.println("num 是偶數(shù)");
} else {
System.out.println("num 是奇數(shù)");
}2.判斷一個(gè)數(shù)字是正數(shù),負(fù)數(shù),還是零
int num = 10;
if (num > 0) {
System.out.println("正數(shù)");
} else if (num < 0) {
System.out.println("負(fù)數(shù)");
} else {
System.out.println("0");
}3.判斷一個(gè)年份是否為閏年
int year = 2000;
if (year % 100 == 0) {
// 判定世紀(jì)閏年
if (year % 400 == 0) {
System.out.println("是閏年");
} else {
System.out.println("不是閏年");
}
} else {
// 普通閏年
if (year % 4 == 0) {
System.out.println("是閏年");
} else {
System.out.println("不是閏年");
}
}3.switch 語句
執(zhí)行流程:
1. 先計(jì)算表達(dá)式的值
2. 和case依次比較,一旦有響應(yīng)的匹配就執(zhí)行該項(xiàng)下的語句,直到遇到break時(shí)結(jié)束
3. 當(dāng)表達(dá)式的值沒有與所列項(xiàng)匹配時(shí),執(zhí)行default
【注意事項(xiàng)】
多個(gè)case后的常量值不可以重復(fù)
switch的括號(hào)內(nèi)只能是以下類型的表達(dá)式:
- 基本類型:byte、char、short、int,注意不能是long類型
- 引用類型:String常量串、枚舉類型
switch 雖然支持嵌套, 但是很丑,一般不推薦~
三、循環(huán)執(zhí)行 (循環(huán)結(jié)構(gòu)) while for do while
1.while 循環(huán)
基本語法格式:
while(循環(huán)條件){
循環(huán)語句;
}循環(huán)條件為 true, 則執(zhí)行循環(huán)語句; 否則結(jié)束循環(huán)
代碼示例:計(jì)算 1! + 2! + 3! + 4! + 5!
int num = 1;
int sum = 0;
// 外層循環(huán)負(fù)責(zé)求階乘的和
while (num <= 5) {
int factorResult = 1;
int tmp = 1;
// 里層循環(huán)負(fù)責(zé)完成求階乘的細(xì)節(jié).
while (tmp <= num) {
factorResult *= tmp;
tmp++;
}
sum += factorResult;
num++;
}
System.out.println("sum = " + sum);注意事項(xiàng)
1. 和 if 類似, while 下面的語句可以不寫 { } , 但是不寫的時(shí)候只能支持一條語句. 建議還是加上 { }
2. 和 if 類似, while 后面的 { 建議和 while 寫在同一行.
3. 和 if 類似, while 后面不要多寫 分號(hào), 否則可能導(dǎo)致循環(huán)不能正確執(zhí)行.
2.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é)束
3.continue
可以跳過此次循環(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 語句的時(shí)候, 就會(huì)立刻進(jìn)入下次循環(huán)(判定循環(huán)條件), 從而不會(huì)執(zhí)行到下方的打印語句.
4.for 循環(huán)
【注意事項(xiàng)】 (和while循環(huán)類似)
1. 和 if 類似, for 下面的語句可以不寫 { } , 但是不寫的時(shí)候只能支持一條語句. 建議還是加上 { }
2. 和 if 類似, for 后面的 { 建議和 while 寫在同一行.
3. 和 if 類似, for 后面不要多寫 分號(hào), 否則可能導(dǎo)致循環(huán)不能正確執(zhí)行.
4. 和while循環(huán)一樣,結(jié)束單趟循環(huán)用continue,結(jié)束整個(gè)循環(huán)用break
5.do while 循環(huán)
先執(zhí)行循環(huán)語句, 再判定循環(huán)條件,循環(huán)條件成立則繼續(xù)執(zhí)行,否則循環(huán)結(jié)束。
【注意事項(xiàng)】
1. do while 循環(huán)最后的分號(hào)不要忘記
2. 一般 do while 很少用到, 更推薦使用 for 和 while.
四、輸入輸出
基本語法
System.out.println(msg); // 輸出一個(gè)字符串, 帶換行 System.out.print(msg); // 輸出一個(gè)字符串, 不帶換行 System.out.printf(format, msg); // 格式化輸出
1,println 輸出的內(nèi)容自帶 \n, print 不帶 \n
2,printf 的格式化輸出方式和 C 語言的 printf 是基本一致的

這個(gè)表格沒必要記住, 用到的時(shí)候根據(jù)需要查一下就行了
五、從鍵盤輸入
使用 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)閉方法
// 執(zhí)行結(jié)果
請(qǐng)輸入你的姓名:
張三
請(qǐng)輸入你的年齡:
18
請(qǐng)輸入你的工資:
1000
你的信息如下:
姓名: 張三
年齡:18
工資:1000.0使用 Scanner 循環(huán)讀取 N 個(gè)數(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();
// 執(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 來結(jié)束輸入 (Windows 上使用 ctrl + z, Linux / Mac 上使用 ctrl + d)
六、猜數(shù)字游戲
要求:
系統(tǒng)自動(dòng)生成一個(gè)隨機(jī)整數(shù)(1-100), 然后由用戶輸入一個(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é)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot中application.properties與application.yml區(qū)別小結(jié)
本文主要介紹了SpringBoot中application.properties與application.yml區(qū)別小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-10-10
Spring中使用自定義ThreadLocal存儲(chǔ)導(dǎo)致的坑及解決
這篇文章主要介紹了Spring中使用自定義ThreadLocal存儲(chǔ)導(dǎo)致的坑及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
Springboot集成Actuator監(jiān)控功能詳解
這篇文章主要介紹了Springboot集成Actuator監(jiān)控功能詳解,有時(shí)候我們想要實(shí)時(shí)監(jiān)控我們的應(yīng)用程序的運(yùn)行狀態(tài),比如實(shí)時(shí)顯示一些指標(biāo)數(shù)據(jù),觀察每時(shí)每刻訪問的流量,或者是我們數(shù)據(jù)庫的訪問狀態(tài)等等,這時(shí)候就需要Actuator了,需要的朋友可以參考下2023-09-09
Java反射的應(yīng)用之動(dòng)態(tài)代理深入理解
這篇文章主要介紹了Java反射的應(yīng)用之動(dòng)態(tài)代理深入理解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09
淺談Java中SimpleDateFormat 多線程不安全原因
SimpleDateFormat是Java中用于日期時(shí)間格式化的一個(gè)類,本文主要介紹了淺談Java中SimpleDateFormat 多線程不安全原因,感興趣的可以了解一下2024-01-01
Java?超詳細(xì)講解設(shè)計(jì)模式之中的建造者模式
建造者模式,是一種對(duì)象構(gòu)建模式 它可以將復(fù)雜對(duì)象的建造過程抽象出來,使這個(gè)抽象過程的不同實(shí)現(xiàn)方法可以構(gòu)造出不同表現(xiàn)的對(duì)象。本文將通過示例講解建造者模式,需要的可以參考一下2022-03-03

