邏輯控制
1.1順序結構
順序結構比較簡單. 像我們之前寫過的代碼就是順序結構的,程式是按照代碼書寫的順序一行一行來執行,
System.out.println("aaa");
System.out.println("bbb");
System.out.println("ccc");
// 運行結果
aaa
bbb
ccc
如果調整代碼的書寫順序,則執行順序也會發生變化
System.out.println("aaa");
System.out.println("ccc");
System.out.println("bbb");
// 運行結果
aaa
ccc
bbb
1.2 分支結構
1.2.1 if 陳述句
基本語法格式1:
//注意,java中最好第一個花括號跟在if陳述句后面
if(布爾運算式){
//條件滿足時執行代碼
}
基本語法格式2:
if(布爾運算式){
//條件滿足時執行代碼
}else{
//條件不滿足時執行代碼
}
基本語法格式3:
if(布爾運算式){
//條件滿足時執行代碼
}else if(布爾運算式){
//條件滿足時執行代碼
}else{
//條件都不滿足時執行代碼
}
注意事項1:懸垂else問題
int x = 20;
int y = 10;
if (x == 10)
if (y == 10)
System.out.println("aaa");
else
System.out.println("bbb");
//猜一猜最侄訓列印出 aaa 還是 bbb?
//答案是什么都不列印,這段代碼最終的樣子是這樣的,
int x = 20;
int y = 10;
if (x == 10) //第一層條件不滿足,所以后面直接不看
if (y == 10)
System.out.println("aaa");
else
System.out.println("bbb");
結論:
- if / else 陳述句中可以不加 大括號,但是也可以寫陳述句(只能寫一條陳述句),
- 如果 if 陳述句不加大括號,此時 else 是和最接近的 if 匹配,但是實際開發中我們不建議這么寫,最好加上大括號,
注意事項2:布爾運算式寫法問題
//比如說判斷一個數num是否小于20大于10
//有的同學可能會這么寫:
if(10 <= num <= 20)
//這樣寫是不行的,正確做法是:
if(num >= 10 && num <= 20)
注意事項3:代碼風格問題
// 風格1
int x = 10;
if (x == 10) {
// 滿足條件
} else {
// 不滿足條件
}
// 風格2
int x = 10;
if (x == 10)
{
// 滿足條件
}
else
{
// 不滿足條件
}
雖然兩種方式都是可取的,但是在java中更推薦使用風格1,{ 放在 if / else 同一行,
注意事項4:分號問題
int x = 20;
if (x == 10); {
System.out.println("hehe");
}
// 運行結果
hehe
//可以看成這樣
int x = 20;
if (x == 10); //這一句已經結束了
{
System.out.println("hehe");
}
結論:
分號在java中表示的一個陳述句的結束,此處多寫了一個分號,導致分號成了 if 陳述句的陳述句體,而 { } 中的代碼已經成為了一個和 if 陳述句無關的代碼塊,所以不管怎么樣,這句代碼都會執行,
1.2.2 switch 陳述句
基本語法:
switch(整數|列舉|字符|字串){
case 內容1 : {
// 內容滿足時執行陳述句;
break;
}
case 內容2 : {
//內容滿足時執行陳述句;
break;
}
...
default:{
//內容都不滿足時執行陳述句;
break;
}
}
- switch 陳述句中引數最大只能是整型,也就是 int 、char 、byte 、short型別可以做引數,而double 、float 、boolean 、long型別不能做引數,
- 根據 switch 中值的不同, 會執行對應的case 陳述句,遇到 break 就會結束該 case 陳述句,
- 如果 switch 中的值沒有匹配的 case, 就會執行 default 中的陳述句,建議一個 switch 陳述句最好都要帶上 default
注意事項1:break 不要遺漏, 否則會失去"多分支選擇的結果"
int day = 1;
switch(day) {
case 1:
System.out.println("星期一");
case 2:
System.out.println("星期二");
break; }
// 運行結果
星期一
星期二
結論:
可以發現,如果不寫 break,case 陳述句會依次向下執行,從而失去了多分支的效果,
注意事項2:switch 中的值只能是 整數|列舉|字符|字串型別
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 個錯誤
注意事項3:switch 不能表達復雜的條件
// 例如: 如果 num 的值在 10 到 20 之間, 就列印 hehe
// 這樣的代碼使用 if 很容易表達, 但是使用 switch 就無法表示.
if (num > 10 && num < 20) {
System.out.println("hehe");
}
注意事項4:switch 雖然支持嵌套, 但是很丑~
int x = 1;
int y = 1;
switch(x) {
case 1:
switch(y) {
case 1:
System.out.println("hehe");
break;
}
break;
case 2:
System.out.println("haha");
break;
}
代碼的美觀程度也是一個重要標準,綜上可以發現,switch 的使用局限性是比較大的,
1.3 回圈結構
1.3.1 while 回圈
基本語法格式:
while(回圈條件){
回圈陳述句;
}
回圈條件為true ,則執行回圈陳述句,否則結束回圈,注意這里回圈條件也必須為布爾運算式
代碼示例1:計算5的階乘
int n = 1;
int result = 1;
while (n <= 5) {
result *= n;
n++;
}
System.out.println(result);
// 執行結果
120
代碼示例2:計算 1!+2!+3!+4!+5!的和
//此時就需要用到回圈嵌套
int n = 1;
int sum = 0;
while(n <= 5) {
int result = 1;
int i = 1;
while (i <= n) {
result *= i;
i++;
}
sum += result;
n++;
}
System.out.println(sum);
//運行結果:
153
注意事項:
- 和 if 類似, while 下面的陳述句可以不寫 { } , 但是不寫的時候只能支持一條陳述句. 建議還是加上 { },
- 和 if 類似, while 后面的 { 建議和 while 寫在同一行,
- 和 if 類似, while 后面不要多寫 分號, 否則可能導致回圈不能正確執行,
代碼示例:
int num = 1;
while (num <= 10); {
System.out.println(num);
num++;
}
// 執行結果
[無任何輸出, 程式死回圈]
此時 ; 為 while 的陳述句體(這是一個空陳述句), 實際的 { } 部分和回圈無關,此時回圈條件 num <= 10 恒成立, 導致代碼死回圈了,
1.3.2 break
break 的功能是讓回圈提前結束,
代碼示例:
找到 100 - 200 中第一個 3 的倍數,
int num = 100;
while (num <= 200) {
if (num % 3 == 0) {
System.out.println("找到了 3 的倍數, 為:" + num);
break;
}
num++;
}
// 執行結果
找到了3的倍數,為:102
1.3.3 continue
continue 的功能是跳過這次回圈, 立即進入下次回圈,
代碼示例:
找到100 - 200 中所有3的倍數,
int num = 100;
while (num <= 200) {
if (num % 3 != 0) {
num++; // 這里的 ++ 不要忘記! 否則會死回圈.
continue; //跳過本次回圈,繼續下一次回圈
}
System.out.println("找到了 3 的倍數, 為:" + num);
num++;
}
可以發現,執行到 continue 陳述句的時候, 就會立刻進入下次回圈(判定回圈條件),從而不會執行下方的列印陳述句,
1.3.4 for 回圈
基本語法:
for(運算式1;運算式2;運算式3){
回圈體;
}
運算式1: 用于初始化回圈變數.
運算式2: 回圈條件
運算式3: 更新回圈變數.
相比于 while 回圈, for回圈將這三個部分合并在一起,寫代碼時不容易遺漏,
代碼示例1:計算5的階乘
int result = 0;
for (int i = 1; i <= 5; i++) {
result *= i;
}
System.out.println("result = " + result);
代碼示例2:計算 1! + 2! + 3! + 4! + 5!
int sum = 0;
for (int i = 1; i <= 5; i++) {
int tmp = 1;
for (int j = 1; j <= i; j++) {
tmp *= j;
}
sum += tmp;
}
System.out.println("sum = " + sum);
注意:(和while回圈類似)
- 和 if 類似, for 下面的陳述句可以不寫 { } , 但是不寫的時候只能支持一條陳述句.,建議還是加上 { },
- 和 if 類似, for 后面的 { 建議和 while 寫在同一行,
- 和 if 類似, for 后面不要多寫分號,否則可能導致回圈不能正確執行,
1.3.5 do while 回圈
基本語法:
do{
回圈陳述句;
}while(回圈條件);
先執行回圈陳述句,在判定回圈條件,
代碼示例:
int num = 10;
do {
System.out.println("666");
}while(num <= 1);
//運行結果 666,可見雖然條件不成立,但是已經執行了一次
注意:
- do while 回圈最后的分號不要忘記,
- 一般 do while 很少用到, 更推薦使用 for 和 while,
1.4 輸入輸出
基本語法:
System.out.println(msg); // 輸出一個字串, 帶換行
System.out.print(msg); // 輸出一個字串, 不帶換行
System.out.printf(format, msg); // 格式化輸出
注意:
- println 輸出的內容自帶 \n, print 不帶 \n,
- printf 的格式化輸出方式和 C 語言的printf是基本一致的,
代碼示例:
System.out.println("hello world");
int x = 10;
System.out.printf("x = %d\n",x);
格式化字串:
如圖所示:

這個表格沒必要記住,用到的時候根據需要查一下就行,
1.4.2 從鍵盤輸入(了解會使用就行)
就目前來看最適合的方法就是使用 Scanner 讀取字串/整數/浮點數,
代碼示例:
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
工資:1000.0
使用Scanner回圈讀取 N個數字:
Scanner sc = new Scanner(System.in);
double sum = 0.0;
int num = 0;
while (sc.hasNextDouble()) {
double tmp = sc.nextDouble();
sum += tmp;
num++;
}
ystem.out.println("sum = " + sum);
System.out.println("avg = " + sum / num);
sc.close();
// 執行結果
10
40.0
50.5
^Z
sum = 150.5
avg = 30.1
注意:
當回圈輸入多個資料的時候, 使用 ctrl + z 來結束輸入 (Windows 上使用 ctrl + z, Linux / Mac 上使用 ctrl +d),
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/163743.html
標籤:python
下一篇:Java基礎知識點隨筆01
