【JavaSE】2、流程控制
1.使用者互動 Scanner
Java提供了一個可以獲取使用者的輸入工具類。java.util.Scanner是Java5的新特徵,可通過Scanner類來獲取使用者的輸入。基本語法:
Scanner s = new Scanner(System.in);
通過Scanner類的next()與nextLine()方法獲取輸入的字串,在讀取前我們一般需要使用 hasNext()與 hasNextLine()判斷是否還有輸入的資料。
next():以空格為分隔符或結束符。
nextLine():以Enter為結束符,可以獲得空格。
package com.kuang; import java.util.Scanner; public class Demo01 { public static void main(String[] args) { // 建立一個掃描器物件,用於接收鍵盤資料 Scanner scanner = new Scanner(System.in); System.out.println("使用next方法接收:"); // 判斷使用者是否輸入字串 if(scanner.hasNext()){ String str = scanner.next(); // 以空格為分隔符或結束符 System.out.println("輸入的內容為:" + str); } if(scanner.hasNextLine()){ String str = scanner.nextLine(); // 以回車為結束符 System.out.println("輸出內容為:"+str); } // 凡是屬於IO流的類如果不關閉會一直佔用資源 scanner.close(); } } // 兩次輸入: Hello World! Hello // next()的輸出 Hello World! // nextLine()的輸出
if(scanner.hasNext())
的作用:判斷輸入是否是需要的資料型別,不是的話就不進入if語句,且不輸出
if (scanner.hasNextBoolean()){
String str = scanner.nextLine();
System.out.println("輸出內容為:"+str);
}
else{
System.out.println("not bool");
}
// 輸入: Hello world!
not bool
2.順序結構
JAVA的基本結構就是順序結構,除非特別指明,否則就按照順序一句一句執行。
順序結構是最簡單的演算法結構,它是任何一個演算法都離不開的一種基本演算法結構。
3.選擇結構
1、if:
if單選擇結構、if雙選擇結構、if多選擇結構、if巢狀結構
2、switch多選擇結構
switch case語句:判斷一個變數與一系列值中某個值是否相等,每個值稱為一個分支。
switch(expression){
case value1:break; //break不會把後面的全部輸出(case穿透現象)
case valuse2:break;
default://可選
}
switch 語句中的變數型別:可以是byte、short、int或者char。從Java SE 7開始,swich支援字串String型別(字元的本質是數字)。
case標籤:必須為字串常量或字面量。
4.迴圈結構
少部分情況需要迴圈一直執行,比如伺服器的請求響應監聽等。
迴圈條件一直為true就會造成無限迴圈(死迴圈),正常的業務程式設計中應該儘量避免死迴圈。會影響程式效能或者造成程式卡死奔潰!
1、do while和 while的區別:while先判斷後執行。 do while是先執行後判斷!do while總是保證迴圈體會被至少執行一次!
2、for迴圈:是支援迭代的一種通用結構,是最有效、最靈活的迴圈結構。for迴圈執行的次數是在執行前就確定的。IDEA快捷鍵:100.for
;死迴圈:for(;;)
。
for迴圈執行順序:先執行初始化步驟,然後檢測布林表示式的值。如果為true,迴圈體被執行。執行一次迴圈後,更新迴圈控制變數(迭代因子控制迴圈變數的增減)。
3、增強for迴圈(for each):Java5引入了一種主要用於陣列或集合(可迭代的)的增強型for迴圈。
package com.kuang.struct;
public class ForDemo05 {
public static void main(String[] args) {
int[] numbers = {10,20,30,40,50}; // 定義一個數組
// 遍歷陣列的元素
for(int x:numbers){
System.out.println(x);
}
}
}
// int x:宣告語句,宣告區域性變數,該變數的型別必須和陣列元素的型別匹配。其作用域限定在迴圈語句塊,其值與此時陣列元素的值相等。
// numbers:可迭代的表示式,要訪問的陣列名,或者是返回值為陣列的方法。
for each適用於迴圈次數未知,或計算迴圈次數比較麻煩的情況。其不能對陣列或集合進行修改(新增刪除操作)。
如果想要修改就要用for循,所以for則在較複雜的迴圈中效率更高。
5.break和continue
break用於強行退出迴圈,不執行迴圈中剩餘的語句。
continue用於終止某次迴圈過程,即跳過迴圈體中尚未執行的語句,接著進行下一次迴圈。
(瞭解)goto關鍵字:
- 儘管goto是Java的一個保留字,但並未在語言中得到正式使用。Java沒有goto。然而,在 break和 continue這兩個關鍵字的身上,仍然能看到一些goto的影子——帶標籤的 break和continue。
- “標籤”指後面跟一個冒號的識別符號,例如:continue label;
- Java唯一用到標籤的地方:在迴圈語句之前。在迴圈之前設定標籤的唯一理由:希望在其中巢狀另一個迴圈,break和 continue通常只中斷當前迴圈,但若隨同標籤使用,就會中斷到存在標籤的地方。
public class Demo07_Label {
public static void main(String[] args) {
//打101- 150之問所有的質數
int count = 0;
outer:for (int i = 101;i < 150;i++){
for (int j = 2; j < i/2;j++){
if (i %j== 0){
continue outer; // 不建議使用!
}
}
System.out.print(i+" ");
}
}
}