JavaSE-流程控制

流程控制

  1. 用戶交互Scanner 獲取用戶鍵盤輸入
  2. 順序結構 程序按順序執行流程
  3. 選擇結構 if,switch
  4. 循環結構 for,do while,while
  5. Break & Continue
  6. 所有的流程控制語句都可以相互嵌套而互不影響

Scanner

Scanner , java.util.Scanner 是Java5的新特徵,通過此類獲取用戶輸入。

基本語法

Scanner s = new Scanner(System.in)

通過Scanner類的next()和nextLine()方法獲取輸入的字符串,在讀取前我們一般需要使用hashNext()與hashNextLine()判斷是否還有輸入的數據。

next()判斷是否有下一個字符,如遇到空格,則空格後的字符並不會被打印出來;而nextLine()則會打印整行內容。

hashNextInt() 判斷是否輸入爲int型

hashNextFloat() 判斷輸入是否爲float類型

package com.Zh1z3ven.Scanner;

import java.util.Scanner;

public class Demo01 {
    public static void main(String[] args) {

        // 創建一個掃描器對象,用於接收鍵盤數據
        Scanner scanner = new Scanner(System.in);

        // alt + enter 顯示提示快捷鍵;mac爲option + enter

        System.out.println("使用next方式接受:");

        // 判斷用戶有沒有輸入字符串

        if (scanner.hasNext()){
            //使用next接受用戶輸入
            String str = scanner.nextLine();
            System.out.println("輸出的內容爲:"+str);
        }

        // 用完scanner後關閉,節省資源,凡是io流,用完後需要關閉,節省資源
        scanner.close();
    }
}

IDEA獲取structure

Command + 單擊 --> 跟進此類的源碼,點擊Structure可以看此類中的所有方法

image-20210603231015956

if else 判斷語句

通過關係表達式的值判斷,爲true執行if,爲false執行else

if (關係表達式){
            語句體;
}else if (關係表達式){
            語句體;
}else {
						語句體;
}
public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("請輸入內容:");

        String s = scanner.nextLine();

        //s.equals 判斷字符串是否相等
        if (s.equals("Hello")){
            System.out.println(s);
        }else {
            System.out.println("end");
        }

        scanner.close();

    }

if else if

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("請輸入成績:");

        int score = scanner.nextInt();

        if (score >= 90 && score < 100){
            System.out.println("A");
        }else if (score >= 80 && score < 90){
            System.out.println("B");
        }else if (score >= 70 && score < 80){
            System.out.println("C");
        }else if (score >= 60 && score < 70){
            System.out.println("D");
        }else if (score >= 0 && score < 60){
            System.out.println("不及格");
        }else {
            System.out.println("輸入的成績有誤");
        }


        scanner.close();
    }

Switch選擇語句

switch格式

switch(表達式) {
case 常量值1:
語句體1;
break;
case 常量值2:
語句體2;
break;
...
default:
語句體n;
break;
}

首先計算出表達式的結果,依次將該結果與case後跟的值進行比較,如果有相等的值則執行相應case中的語句,遇到break跳出switch語句,如果沒有case符合表達式的結果,則執行default中語句。case後的值可以是byte/short/int/char,在javaSE7之後支持String類型,case標籤必須是字符串常量或字面量

JDK7的新特性,表達式的結果可以是字符串

字符的本質還是數字

    public static void main(String[] args) {

        int weekday = 4;
        switch (weekday) {
            case 1:
            		// 這裏case下面不加break會出現case穿透,即沒加break的case都會執行一遍語句體,不管是否匹配表達式
                System.out.println("星期一");
                break;
            case 2:
                System.out.println("星期二");
                break;
            case 3:
                System.out.println("星期三");
                break;
            case 4:
                System.out.println("星期四");
                break;
            case 5:
                System.out.println("星期五");
                break;
            default:
                System.out.println("輸入參數有誤");
                break;
        }

    }

反編譯

因爲Java程序在執行時會把java文件先編譯爲class文件,而class文件打開是字節碼文件,用文本形式打開是亂碼,這時候就需要反編譯class文件,將其變爲java文件方便我們閱讀。而IDEA就可以做到反編譯。

將我們編譯運行java文件生成的對應的class文件拷貝到上面的程序目錄

public static void main(String[] args) {
        String name = "Zh1z3ven";

        switch (name){
            case "Zh1z3ven":
                System.out.println("Zh1z3ven");
                break;
            default:
                System.out.println("輸入有誤");
        }


    }

image-20210604165009816

這時就可以看到java文件了,這裏機器在處理時利用字符串的hashcode去代替字符串進行判斷。

image-20210604165325624

順序結構

在java中main函數作爲程序主入口,從main函數開始順序執行代碼塊。

for循環

當布爾表達式爲true時循環執行循環體中內容,直到布爾表達式爲false時,結束循環。

關於for循環的說明

最新執行初始化步驟,可以聲明一種類型,但可初始化一個或多個循環控制變量,也可以是空語句。

然後檢測布爾表達式的值。如果爲true,循環體被執行,如果爲false,循環種植,開始執行循環體後面的語句

執行一次循環後,更新循環控制變量(迭代因子控制循環變量的增減)

再次檢索布爾表達式,循環執行上面的過程

for(初始化表達式;布爾表達式;步進表達式){    循環體;}
public static void main(String[] args) {        for (int i = 1; i <= 9; i++) {            for (int j = 1; j <= i; j++) {                System.out.print(j+"*"+i+"="+j*i+"\t");            }            System.out.println("");        }    }1*1=1	1*2=2	2*2=4	1*3=3	2*3=6	3*3=9	1*4=4	2*4=8	3*4=12	4*4=16	1*5=5	2*5=10	3*5=15	4*5=20	5*5=25	1*6=6	2*6=12	3*6=18	4*6=24	5*6=30	6*6=36	1*7=7	2*7=14	3*7=21	4*7=28	5*7=35	6*7=42	7*7=49	1*8=8	2*8=16	3*8=24	4*8=32	5*8=40	6*8=48	7*8=56	8*8=64	1*9=9	2*9=18	3*9=27	4*9=36	5*9=45	6*9=54	7*9=63	8*9=72	9*9=81	

增強for循環

主要是用來遍歷數組和集合對象的。

Jdk5引入了一種主要用於數組和集合的增強型for循環

聲明語句:聲明新的局部變量,該變量的類型必須和數組元素的類型匹配。其作用域限定在循環語句快,其值與此時數組元素的值相等。

表達式:表達式是要訪問的數組名,或者是返回值爲數組的方法。

for(聲明語句:表達式){	//代碼}
public static void main(String[] args) {        int[] numbers = {10, 20, 30, 40, 50};        for (int x:numbers){            System.out.println(x);        }    }

while循環

當布爾表達式爲true時執行循環體,若永遠爲true則是死循環,可以添加步進表達式控制循環次數,當布爾表達式永真時則爲死循環。所以也需要控制布爾表達式的值,當達到目的後停止while循環。

初始化表達式while(布爾表達式){循環體步進表達式}
public static void main(String[] args) {        // 輸出1-100        int i = 0;        while (i<100){            i++;            System.out.println(i);        }
public static void main(String[] args) {        // 計算1+2+3+...100        int i = 0;        int sum = 0;        while (i<100){            i++;            sum += i;        }        System.out.println(sum);            }

do-while循環

do-while會先執行一次循環體在去判斷布爾表達式,也就是說無論如何都會執行一次循環體,而while循環,當布爾值爲false直接會跳過循環體不執行。

初始化表達式do{循環體步進表達式}while(布爾表達式);
// do-while會執行一次循環體,而下面的while並不會執行循環體public static void main(String[] args) {        int i = 0;        int sum = 0;        do {            i++;            sum = sum + i;        }while (i<100);            System.out.println(sum);    }
  • [x] > 控制條件語句所控制的那個變量(比如常用i作控制循環次數的變量),在for循環結束後,就不能再被訪問到了,而while循環結束還可以繼續使用,如果想繼續使用,就用while,否則推薦使用for。原因是for循環結束,該變量就從內存中消失,能夠提高內存的使用效率。

    while與do-while區別

break&continue

break

break在任何循環語句的主體部分,均可用break控制循環的流程。break用於強行退出循環,不執行循環中剩餘的語句。(break語句也在switch語句中使用)

continue

contibue語句用在循環語句體中,用於終止某次循環過程,即跳過循環體中尚未執行的語句,接着進行下一次是否執行循環的判定。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章