順序結構比較簡單. 像我們之前寫過的程式碼就是順序結構的,程式是按照程式碼書寫的順序一行一行來執行。
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:
//注意,java中最好第一個花括號跟在if語句後面
if(布林表示式){
//條件滿足時執行程式碼
}
基本語法格式2:
if(布林表示式){
//條件滿足時執行程式碼
}else{
//條件不滿足時執行程式碼
}
基本語法格式3:
if(布林表示式){
//條件滿足時執行程式碼
}else if(布林表示式){
//條件滿足時執行程式碼
}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");
結論:
//比如說判斷一個數num是否小於20大於10
//有的同學可能會這麼寫:
if(10 <= num <= 20)
//這樣寫是不行的,正確做法是:
if(num >= 10 && num <= 20)
// 風格1
int x = 10;
if (x == 10) {
// 滿足條件
} else {
// 不滿足條件
}
// 風格2
int x = 10;
if (x == 10)
{
// 滿足條件
}
else
{
// 不滿足條件
}
雖然兩種方式都是可取的,但是在java中更推薦使用風格1,{ 放在 if / else 同一行。
int x = 20;
if (x == 10); {
System.out.println("hehe");
}
// 執行結果
hehe
//可以看成這樣
int x = 20;
if (x == 10); //這一句已經結束了
{
System.out.println("hehe");
}
結論:
分號在java中表示的一個語句的結束,此處多寫了一個分號,導致分號成了 if 語句的語句體,而 { } 中的程式碼已經成為了一個和 if 語句無關的程式碼塊,所以不管怎麼樣,這句程式碼都會執行。
基本語法:
switch(整數|列舉|字元|字串){
case 內容1 : {
// 內容滿足時執行語句;
break;
}
case 內容2 : {
//內容滿足時執行語句;
break;
}
...
default:{
//內容都不滿足時執行語句;
break;
}
}
int day = 1;
switch(day) {
case 1:
System.out.println("星期一");
case 2:
System.out.println("星期二");
break; }
// 執行結果
星期一
星期二
結論:
可以發現,如果不寫 break,case 語句會依次向下執行,從而失去了多分支的效果。
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 個錯誤
// 例如: 如果 num 的值在 10 到 20 之間, 就列印 hehe
// 這樣的程式碼使用 if 很容易表達, 但是使用 switch 就無法表示.
if (num > 10 && num < 20) {
System.out.println("hehe");
}
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 的使用侷限性是比較大的。
基本語法格式:
while(迴圈條件){
迴圈語句;
}
迴圈條件為true ,則執行迴圈語句,否則結束迴圈。注意這裡迴圈條件也必須為布林表示式
int n = 1;
int result = 1;
while (n <= 5) {
result *= n;
n++;
}
System.out.println(result);
// 執行結果
120
//此時就需要用到迴圈巢狀
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
注意事項:
int num = 1;
while (num <= 10); {
System.out.println(num);
num++;
}
// 執行結果
[無任何輸出, 程式死迴圈]
此時 ; 為 while 的語句體(這是一個空語句), 實際的 { } 部分和迴圈無關。此時迴圈條件 num <= 10 恆成立, 導致程式碼死迴圈了。
break 的功能是讓迴圈提前結束。
程式碼範例:
找到 100 - 200 中第一個 3 的倍數。
int num = 100;
while (num <= 200) {
if (num % 3 == 0) {
System.out.println("找到了 3 的倍數, 為:" + num);
break;
}
num++;
}
// 執行結果
找到了3的倍數,為:102
continue 的功能是跳過這次迴圈, 立即進入下次迴圈。
程式碼範例:
找到100 - 200 中所有3的倍數。
int num = 100;
while (num <= 200) {
if (num % 3 != 0) {
num++; // 這裡的 ++ 不要忘記! 否則會死迴圈.
continue; //跳過本次迴圈,繼續下一次迴圈
}
System.out.println("找到了 3 的倍數, 為:" + num);
num++;
}
可以發現,執行到 continue 語句的時候, 就會立刻進入下次迴圈(判定迴圈條件),從而不會執行下方的列印語句。
基本語法:
for(表示式1;表示式2;表示式3){
迴圈體;
}
表示式1: 用於初始化迴圈變數.
表示式2: 迴圈條件
表示式3: 更新迴圈變數.
相比於 while 迴圈, for迴圈將這三個部分合並在一起,寫程式碼時不容易遺漏。
int result = 0;
for (int i = 1; i <= 5; i++) {
result *= i;
}
System.out.println("result = " + result);
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);
基本語法:
do{
迴圈語句;
}while(迴圈條件);
先執行迴圈語句,在判定迴圈條件。
int num = 10;
do {
System.out.println("666");
}while(num <= 1);
//執行結果 666,可見雖然條件不成立,但是已經執行了一次
注意:
基本語法:
System.out.println(msg); // 輸出一個字串, 帶換行
System.out.print(msg); // 輸出一個字串, 不帶換行
System.out.printf(format, msg); // 格式化輸出
注意:
System.out.println("hello world");
int x = 10;
System.out.printf("x = %d\n",x);
如圖所示:
這個表格沒必要記住,用到的時候根據需要查一下就行。
就目前來看最適合的方法就是使用 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 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)。