1. 程式人生 > 實用技巧 >Java基礎之流程控制

Java基礎之流程控制

輸入和輸出

println是print line的縮寫,表示輸出並換行。因此,如果輸出後不想換行,可以用print()

格式化輸出

Java還提供了格式化輸出的功能。為什麼要格式化輸出?因為計算機表示的資料不一定適合人來閱讀:

如果要把資料顯示成我們期望的格式,就需要使用格式化輸出的功能。格式化輸出使用System.out.printf(),通過使用佔位符%?printf()可以把後面的引數格式化成指定格式:

Java的格式化功能提供了多種佔位符,可以把各種資料型別“格式化”成指定的字串:

佔位符 說明
%d 格式化輸出整數
%x 格式化輸出十六進位制整數
%f 格式化輸出浮點數
%e 格式化輸出科學計數法表示的浮點數
%s 格式化字串

注意,由於%表示佔位符,因此,連續兩個%%表示一個%字元本身。

輸入

和輸出相比,Java的輸入就要複雜得多。

我們先看一個從控制檯讀取一個字串和一個整數的例子:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // 建立Scanner物件
        System.out.print("Input your name: "); // 列印提示
        String name = scanner.nextLine(); // 讀取一行輸入並獲取字串
        System.out.print("Input your age: "); // 列印提示
        int age = scanner.nextInt(); // 讀取一行輸入並獲取整數
        System.out.printf("Hi, %s, you are %d\n", name, age); // 格式化輸出
    }
}

我們通過import語句匯入java.util.Scannerimport是匯入某個類的語句,必須放到Java原始碼的開頭,後面我們在Java的package中會詳細講解如何使用import

然後,建立Scanner物件並傳入System.inSystem.out代表標準輸出流,而System.in代表標準輸入流。直接使用System.in讀取使用者輸入雖然是可以的,但需要更復雜的程式碼,而通過Scanner就可以簡化後續的程式碼。

有了Scanner物件後,要讀取使用者輸入的字串,使用scanner.nextLine(),要讀取使用者輸入的整數,使用scanner.nextInt()

Scanner會自動轉換資料型別,因此不必手動轉換。

要測試輸入,我們不能線上執行它,因為輸入必須從命令列讀取,因此,需要走編譯、執行的流程:

要測試輸入,我們不能線上執行它,因為輸入必須從命令列讀取,因此,需要走編譯、執行的流程:

$ javac Main.java

這個程式編譯時如果有警告,可以暫時忽略它,在後面學習IO的時候再詳細解釋。編譯成功後,執行:

$ java Main
Input your name: Bob
Input your age: 12
Hi, Bob, you are 12

IF判斷

串聯的效果其實相當於:

if (n >= 90) {
    // n >= 90為true:
    System.out.println("優秀");
} else {
    // n >= 90為false:
    if (n >= 60) {
        // n >= 60為true:
        System.out.println("及格了");
    } else {
        // n >= 60為false:
        System.out.println("掛科了");
    }
}

正確的方式是按照判斷範圍從大到·小依次判斷:

// 從大到小依次判斷:
if (n >= 90) {
    // ...
} else if (n >= 60) {
    // ...
} else {
    // ...
}

在串聯使用多個if時,要特別注意判斷順序。觀察下面的程式碼:

判斷引用型別相等

在Java中,判斷值型別的變數是否相等,可以使用==運算子。但是,判斷引用型別的變數是否相等,==表示“引用是否相等”,或者說,是否指向同一個物件。例如,下面的兩個String型別,它們的內容是相同的,但是,分別指向不同的物件,用==判斷,結果為false

小結

if ... else可以做條件判斷,else是可選的;

不推薦省略花括號{}

多個if ... else串聯要特別注意判斷順序;

要注意if的邊界條件;

要注意浮點數判斷相等不能直接用==運算子;

引用型別判斷內容相等要使用equals(),注意避免NullPointerException