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.Scanner
,import
是匯入某個類的語句,必須放到Java原始碼的開頭,後面我們在Java的package
中會詳細講解如何使用import
。
然後,建立Scanner
物件並傳入System.in
。System.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
。