Java筆記02:控制流

if-else

if (Boolean-expression) {
    // 要執行的語句
}

這是if判斷的基本形式,和C語言沒有什麼差異,括號中的布爾表達式(Boolean-expression)必需要生成一個boolean類型的結果,要麼是true要麼是false,而花括號中的語句塊只會在表達式爲true時執行。express

和C語言同樣,當 if後面只有一個分號 ;結尾的語句時,能夠省略花括號,可是爲了之後修改程序方便,建議任什麼時候候都保持有花括號的統一格式。
public class IfElse {
    public static void main(String[] args) {
        int n = 95;
        if (n >= 60) {
            System.out.println("及格");
        } else {
            System.out.println("掛科");
        }
    }
}
public class IfElse {
    public static void main(String[] args) {
        int n = 95;
        if (n >= 90) {
            System.out.println("優秀");
        } else if (n >= 60) {
            System.out.println("合格");
        } else {
            System.out.println("掛科");
        }
    }
}

上面兩個程序是if-else結構,和C語言同樣,else if只是else後面跟了一個if語句,不像Python中的elif是個專門的關鍵字。數組

判斷字符串是否相等

String字符串是引用類型,在上一篇中講到了引用類型的概念,引用類型的變量名實質上是指向對象在堆內存中的地址。考慮下面這個例子:設計

public class Main {
    public static void main(String[] args) {
        String s1 = "hello";
        String s2 = "hello";
        System.out.println(s1);
        System.out.println(s2);
        if (s1 == s2) {
            System.out.println("s1 == s2");
        } else {
            System.out.println("s1 != s2");
        }
    }
}
public class Main {
    public static void main(String[] args) {
        String s1 = "hello";
        String s2 = "HELLO".toLowerCase();
        System.out.println(s1);
        System.out.println(s2);
        if (s1 == s2) {
            System.out.println("s1 == s2");
        } else {
            System.out.println("s1 != s2");
        }
    }
}

運行上面兩個程序,你會發現,結果竟然並不同!爲何第一個程序顯示兩個變量相等,而第二個結果倒是不相等呢?
對於引用類型來講,既然變量保存的是對象的地址,那麼若是是同一個內存空間中的對象那天然他們的值是相等的(固然了,在一個空間里根本就是一個對象嘛)。
字符串類型有一些些特殊,第一個程序裏給兩個變量都賦值hello,爲了節省空間實質上只建立了一個對象,但不要把但願寄於全部字符串都這樣,就像第二個例子中,雖然兩個字符串最後結果都是hello這個值,倒是放在不一樣內存空間裏的兩個字符串對象。
爲了精確判斷兩個字符串的值是否相等,應該使用equals()方法。code

String s1 = "hello";
String s2 = "Hello";
if (s1.equals(s2)) {
    System.out.println("相等");
} else {
    System.out.println("不相等");
}

switch

public class Main {
    public static void main(String[] args) {
        int option = 2;
        switch (option) {
        case 1:
            System.out.println("Selected 1");
            break;
        case 2:
        case 3:
            System.out.println("Selected 2, 3");
            break;
        default:
            System.out.println("Not selected");
            break;
        }
    }
}

switch能夠用if來代替。要注意每一個case後面有冒號,而不須要花括號,每一個case須要有break,不然將繼續將後面的case內容執行,固然有些狀況就是不一樣的case要執行的操做相同,如上面例子中的2和3。default是全部case都不匹配時執行的。
switch還能夠選擇字符串,比較的是字符串的值。對象

Python中並無switch語句,設計者認爲switch會破壞Python的靈活性。

while循環

while (Boolean-expression) {
    // 要執行的語句
}

和C語言沒有區別,只要知足條件,就會一直執行while中的語句,同時Java中也有do-while循環,do-while相比while的區別是保證循環中的語句至少要被執行一次。索引

do {
    // 要執行的語句
} while (Boolean-expression)

for循環與for-in循環

for (初始條件; 循環檢測條件; 循環後更新計數器) {
    // 執行語句
}

和C語言的for循環沒有什麼區別,但在Java中,還實現了一種更加便捷的for-in循環:內存

int[] s = { 1, 2, 3, 4, 5, 6 };
for (int i = 0; i < s.length, i++) {
    System.out.println(s[i]);
}

這樣遍歷一個數組比較麻煩,用for-in的方法來寫是這樣:作用域

int[] s = { 1, 2, 3, 4, 5, 6 };
for (int n: s) {
    System.out.println(n);
}

for-in不使用索引,直接去遍歷一個序列的每一個元素,寫起來更爲簡潔。字符串

吐槽一下,相比起Python中 for i in arr和C#中的 foreach (類型 變量名 in 序列)的寫法比起來,這種 for (類型 變量名: 序列)的奇葩寫法讓人一眼根本看不出來是在作什麼啊。

順帶一提:it

for (int i = 0; i < 10 ; i++) {
}

這裏這個變量i的做用域僅僅在for循環體內部,出了循環就沒法使用i了,若是但願循環結束還能夠訪問i,能夠這樣寫:

int i;
for (i = 0; i < 10; i++) {
}

break和continue

public class Main {
    public static void main(String[] args) {
        int i;
        for (i = 0; i < 100; i++) {
            if (i == 97) {
                break; // 跳出循環
            }
            if (i % 2 == 0) {
                continue; // 下一次循環
            }
            System.out.println("在沒有continue時會執行" + i);
        }
        System.out.println("跳出循環後執行" + i);
    }
}

break直接跳出當前循環,強調當前是由於有時候會使用嵌套循環,一個break只會跳出所在的那一層循環。continue則是直接本次循環結束,進入下一次循環。

相關文章
相關標籤/搜索