1. 程式人生 > 實用技巧 >簡說Java控制流程

簡說Java控制流程

流程控制

1.使用者互動Scanner

  • Scanner類

    • 獲取使用者的輸入

    • Scanner reader = new Scanner(System.in);

    • next(),nextLine(),hasNext(),hasNextLine();

package scanner;

import java.util.Scanner;

public class Demo02 {
    public static void main(String[] args) {
        //建立一個掃描器物件,用於接受鍵盤資料
        Scanner reader = new Scanner(System.in);
        System.out.println("使用nextLine()方式接收");
        //判斷使用者有沒有輸入字串
        if(reader.hasNextLine()){
            String str = reader.nextLine();
            System.out.println(str);
        }
        //凡是屬於IO流,使用完畢之後務必關閉資源
        reader.close();
    }
}
package scanner;

import java.util.Scanner;

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

        int sum = 0;
        int count = 0;

        while(scanner.hasNextDouble()){
            double x = scanner.nextDouble();
            count++;
            sum += x;
        }
        System.out.println(sum);
        scanner.close();
    }
}

2.順序結構

  • 基本結構
  • 每個演算法都離不開的結構

3.選擇結構

3.1單選擇結構

boolean flag = true;
if(flag){
    
}

3.2雙選擇結構

boolean flag = true;
if(flag){
    
}else{
    
}

3.3多選擇結構

boolean flag = true;
if(flag){
    
}else if(flag){
    
}else{
    
}

3.4巢狀結構

if(){
    if(){
        
    }
}
package struct;

import java.util.Scanner;

public class Demo01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double score = 0;
        System.out.println("請輸入成績:");

        //接收資料
        if(scanner.hasNextDouble()){
            score = scanner.nextDouble();
        }
        //判斷成績的級別
        if(score == 100){
            System.out.println("S");
        }else if(score<100 && score>=90){
            System.out.println("A");
        }else if(score<90 && score>=80){
            System.out.println("B");
        }else if(score<80 && score>=70){
            System.out.println("C");
        }else if(score<70 && score>=60){
            System.out.println("D");
        }else if(score<60){
            System.out.println("不及格");
        }else{
            System.out.println("成績不合法");
        }
        scanner.close();
    }
}

3.5switch選擇結構

case穿透現象

switch語句會根據表示式的值從相匹配的case標籤處開始執行,一直執行到break語句處或者是switch語句的末尾。如果沒有break語句,那麼就會從表示式的值相匹配的case標籤處開始執行,一直執行到switch語句的末尾,這種從其中的一個case處開始,忽略後面的值的匹配,直接執行case的內容的現象就是穿透的現象。

public class Demo02 {
    public static void main(String[] args) {
        //case穿透 無break
        //switch “匹配”
        char grade = 'B';
        switch (grade){
            case 'A':
                System.out.println("優秀");
                break;
            case 'B':
                System.out.println("良好");
            case 'C':
                System.out.println("及格");
            case 'D':
                System.out.println("再接再厲");
            default:
                System.out.println("掛科");
        }//沒有break就會出現case穿透現象!輸出下邊所有的
    }
}

反編譯

idea中可以直接將class檔案 丟在一個資料夾下

4.迴圈結構

whill迴圈 do……while迴圈

int i = 0 ;
while(i<100){
    System.out.println(i++);
}
package struct;

public class Demo03 {
    public static void main(String[] args) {
        int i = 0;
        while(i<100){
            System.out.println(++i);
        }
        //=========================================
        int a = 0;
        int sum = 0;
        while(a<=100){
            sum += a;
            a++;
        }
        System.out.println(sum);
        //===================================================
        int b = 0;
        int c = 0;
        do{
            System.out.println(b);
        }while(b<0);
        System.out.println("======================");
        while(c<0){
            System.out.println(c);
        } 
    }
}

for迴圈

  • 迭代的通用結構。有效、靈活
  • 執行次數在執行前就確定的
    1. 最先執行的為初始化步驟。可以聲名一種型別,可以初始化一個或者多個迴圈變數可以是空語句
    2. 其次,檢測布林表示式的值,也可以為空即死迴圈
    3. 執行一次迴圈後,更新迴圈控制變數
//用whil/do迴圈輸出0-1000 5的倍數,且每行輸出三個
        for (int i = 0; i < 1000; i++) {
            if((i%5)==0){
                System.out.print(i+"\t");
            }
            if((i%(3*5))==0) {
                System.out.println();
            }
        }
package struct;

public class Demo06 {
    public static void main(String[] args) {
        //九九乘法表
        for(int i = 1; i<= 9 ;i++){
            for (int j = 1; j <= i; j++) {
                System.out.print(i + "*" + j+ "=" + i*j + "\t");
            }
            System.out.println();
        }
    }
}

  • 增強for迴圈 for each

5.break、continue

  • break

    在任何迴圈語句的主體部分,均可以使用break控制迴圈的流程。break用於強制退出迴圈不執行迴圈中剩餘的語句

for(i = 0; i < 100; i++){
    if(i == 30){
        break;
    }
    System.out.println(i+"\t");
}//輸出0~29
  • continue

    用在迴圈語句體中,用於終止某一次的迴圈過程

for(i = 0; i < 100; i++){
    if(i%10 == 0){
        continue;
    }
    System.out.println(i+"\t");
}//不輸出10的倍數
  • goto關鍵字(瞭解)

    • goto依然是Java中的一個保留字,在break和continue中可以看到一些goto的影子

    • “標籤”指後面跟一個冒號的識別符號:

      lable:

    • 對Java來說唯一用到標籤的地方是在迴圈語句之前

package struct;

public class Demo08 {
    public static void main(String[] args) {
        //列印101到150之間的質數
        lable:for(int i = 101;i<150;i++){
            for(int j = 2;j<i/2;j++)
                if(i%j==0)
                    continue lable;
            System.out.print(i+"\t");
        }
    }
}

6練習

public class Demo09 {
    public static void main(String[] args) {
        //列印三角形
        for (int i = 0; i < 5; i++) {
            for (int j = 5; j > i; j--) {
                System.out.print(" ");
            }
            for (int j = 0; j <= i; j++) {
                System.out.print("*");
            }
            for (int j = 0; j < i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

  • debug初步使用
  • 安利良心Up主,超棒!

狂神說Java