1. 程式人生 > 其它 >Java流程控制——基礎階段

Java流程控制——基礎階段

Java流程控制——基礎階段

1. 使用者互動Scanner

1.1 Scanner物件

  • 之前的基本語法沒有實現程式和人的互動,但Java給我們提供了一個工具類Scanner可以用來獲取使用者的輸入。java.util.Scanner是Java5的新特徵,我們可以通過Scanner類來獲取使用者的輸入

  • 基本語法

    Scanner s = new Scanner(System.in);
    
  • 通過Scanner類的next()與nextline()方法獲取輸入的字串,在讀取之前我們一般需要使用hasNext() 與 hasNextLine()判斷是否還有輸入的資料

  • next()

    • 一定要讀取到有效字元後才可以結束輸入
    • 對輸入有效字元之前遇到的空白,next()方法會自動將其去掉
    • 只有輸入有效字元後才將其後面輸入的空白作為分隔符或者結束符
    • next()不能得到帶有空格的字串
  • nextline()

    • 以Enter為結束符,也就是說,nextline()方法返回的是輸入回車之前的所有字元
    • 可以獲得空白
\\next()應用
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);
        }
        //凡是屬於IO流的類如果不關閉就會一直佔用資源,要養成好習慣用完就關掉
        scanner.close();
    }
}
\\nextline()應用
import java.util.Scanner;

public class Demo02 {
    public static void main(String[] args) {
        // 從鍵盤接受資料
        Scanner scanner = new Scanner(System.in);

        System.out.println("使用NextLine方式接收:");

        // 判斷是否還有輸入
        if (scanner.hasNextLine()){
            String str = scanner.nextLine();
            System.out.println("輸出內容為:"+str);
        }
        scanner.close();
    }
}
// 例項
import java.util.Scanner;

public class Demo05 {
    public static void main(String[] args) {
        //輸入多個數字,並求取總和與平均數,每輸入一個數字用回車確認,通過輸入非數字來結束並輸出執行結果

        Scanner scanner = new Scanner(System.in);

        // 和
        double sum = 0;
        // 計算輸出了多少個數字
        int m = 0;

        // 通過迴圈判斷是否還有輸入,並在裡面對每一次進行求和統計
        while (scanner.hasNextDouble()){
            double x = scanner.nextDouble();
//            System.out.println("你輸入了第"+m+"個數據,當前結果sum="+sum);
            m++;
            sum = x+sum;// sum+=x;
            System.out.println("你輸入了第"+m+"個數據,當前結果sum="+sum);
        }
        System.out.println(m+"個數的總和為:"+sum);
        System.out.println(m+"個數的平均值為:"+sum/m);

        scanner.close();
    }
}

2. 順序結構

  • Java的基本結構就是順序結構,除非特別指明,否則就是按照順序操作
  • 順序結構是最簡單的演算法結構
  • 語句與語句之間,框與框之間都是按從上到下順序進行的,它是有若干個依次執行的處理步驟組成的,它是任何一個演算法都離不開的基本結構。

3. 選擇結構

  • if單選結構

    • 語法:

      if(布林表示式){
          // 如果布林表示式為true執行的語句
      }
      
  • if雙選結構

    • if ...else
  • if多選擇結構

    if(){
        
    }else if(){
        
    }else if(){
        
    }else {
        
    }
    
  • 巢狀的if結構

    • 可以在if...else語句中巢狀使用else...if
  • switch多選擇結構

    • switch case 語句判斷一個變數與一系列值中某個值是否相等,每個值稱為一個分支
    • switch 語句中的變數型別可以是:
      • byte、short、int或者char
      • 支援String型別
      • 同時case標籤必須為字串常量或字面量

4. 迴圈結構

  • while迴圈

    • 最基本的迴圈,它的結構為

      while(布林表示式){
          //迴圈內容
      }
      
    • 只要表示式為true,迴圈就會一種會迴圈下去

    • 大多數情況下,我們需要一個讓表示式失效的方式來結束迴圈

    • 少部分情況下需要程式一直執行,如伺服器的請求響應

  • do...while迴圈

    • 對於while迴圈而言,如果不滿足條件,則不能進入迴圈。但有時候我們需要即使不滿足條件也至少執行一次

    • 而do...while 迴圈與while最大的不同就是至少執行一次

    • while與do...while區別:

      • while先判斷後執行,do...while先執行後判斷
      • do...while總是保證迴圈體能至少執行一次
      do{
          //程式碼語句
      }while(布林表示式)
      
  • for迴圈

    • for迴圈語句是支援迭代的一種通用結構,是最有效、最靈活的迴圈結構

    • for迴圈的執行次數是在執行前確定的,語法格式如下:

      for(初始化;布林表示式;更新){
          //程式碼語句
      }
      
    • //100.for可以在IDEA中快捷輸入for迴圈
      
  • 在Java5中引入了一種主要用於陣列的增強型for迴圈

    • 先了解,後面再仔細學習

    • 用於迴圈陣列和集合的

    • 語法格式:

      for(宣告語句:表示式){
          //程式碼語句
      }
      
      public class ForDemo05 {
          public static void main(String[] args) {
              int [] numbers = {10, 20, 30, 40, 50}; //定義了一個數組
      
              for (int i = 0; i < 5; i++) {
                  System.out.println(numbers[i]);
              }
              System.out.println("================");
              //遍歷陣列的元素
              for (int x:numbers){
                  System.out.println(x);
              }
          }
      }
      

5. break&continue

  • // break在任何迴圈語句的主體部分,均可用break控制迴圈的流程
    //   break用於強行退出迴圈,不執行迴圈中剩餘的語句(也在switch中使用)
    //
    // continue 語句在迴圈語句體中,用於種植某次迴圈過程,即跳過迴圈體中尚未執行的語句。接著進行下一次是否執行迴圈的判定
    
  • 關於goto關鍵字

    • goto是Java保留字,但未在語言中得到正式使用

6. 練習

public class TestDemo {
    public static void main(String[] args) {
        //列印三角形 5行
        for (int i = 1; i <= 5; i++) {
            for (int j=5; j>=i;j--){
                System.out.print(" ");
            }
            for (int j=1; j<=i;j++){
                System.out.print("*");
            }
            for (int j=2; j<=i;j++){
                System.out.print("*");
            }
            System.out.println();
        }
    }
}
  • Debug技巧:先在程式某行點選斷點,然後debug,接著可以選擇step into按鈕繼續一行一行執行程式,觀察程式結構在console中的變化