1. 程式人生 > 其它 >【JavaSE】2、流程控制

【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+" ");
        }
    }
}