1. 程式人生 > 其它 >第二章 Java流程控制

第二章 Java流程控制

第二章 Java流程控制

1 Scanner物件

1.1 用途

Java提供了Scanner工具類用以獲取使用者的輸入,java.util.Scanner是Java5的新特徵,可以用Scanner類來獲取使用者的輸入

1.2 基本語法

Scanner scanner = new Scanner(System.in);

通過Scanner類的next()nextLine()方法獲取輸入的字串,在讀取前外面一般需要使用hasNext()hasNextLine()判斷是否還有輸入的資料,當然也可以不用判斷

1.2 next()

  1. 空白(即空格)為結束符,若文字帶有空格則不會顯示空格後的內容
  2. next()不能得到帶有空格的字串
package com.liam.scanner;

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();//使用next方法把使用者輸入的內容存在str中
            System.out.println("輸入的內容為:"+str);
        }

        scanner.close();//凡是IO流的類如果不關閉會一直佔用資源,所以要養成好習慣,用完就關掉,就像洗完手就要關水龍頭
    }
}

輸出效果如圖:

1.3 nextLine()

  1. 回車為結束符,也就是說nextLine()方法返回的是輸入回車之前的所有字元
  2. 可以得到帶有空格的字串
package com.liam.scanner;

import java.util.Scanner;

public class Demo02 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("使用nextLine方式接收:");

        String str = scanner.nextLine();
        System.out.println("輸入的內容為"+str);

        scanner.close();
    }
}

輸出效果如圖:

【注意】凡是IO流的類如果不關閉會一直佔用資源,所以要養成好習慣,用完就關掉,就像洗完手就要關水龍頭

1.4 nextXXX()和hasNextXXX()

  • Scanner除了nextLine()方法外還有很多形式以nextXXX()的方法來存放使用者輸入的不同型別的資料,如nextInt(),nextFloat(),nextLong()等
  • 同理Scanner還有與之配套的hasNextXXX()方法以此來判斷使用者是否輸入了相應的資料型別,如hasNextInt(),hasNextFloat(),hasNextLong()等
package com.liam.scanner;

import java.util.Scanner;

public class Demo04 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int i = 0;
        float f = 0.0f;

        System.out.println("請輸入整數:");
        
        //判斷輸入的是否為int型
        if (scanner.hasNextInt()){
            i = scanner.nextInt();
            System.out.println("輸入的整數為:"+i);
        }else {
            System.out.println("輸入的不是整數!");
        }

        System.out.println("請輸入小數:");
        
        //判斷輸入的是否為float型
        if (scanner.hasNextFloat()){
            f = scanner.nextFloat();
            System.out.println("輸入的小數為:"+f);
        }else {
            System.out.println("輸入的不是小數!");
        }

        scanner.close();
    }
}

練習:輸入多個數字,求其總和與平均數,每輸入一個數字用回車確認,通過輸入非數字來結束輸入並輸出執行結果

package com.liam.scanner;

import java.util.Scanner;

public class Demo05 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int i = 0;
        double num = 0;
        double sum = 0;

        System.out.println("Please enter the number:");
        while (scanner.hasNextDouble()){
            System.out.println("Please enter the number:");
            num = scanner.nextDouble();
            i++;
            sum = sum +num;
            System.out.println("Now the sum is:"+sum+"\nNow the average is:"+sum/i);
        }

        scanner.close();
    }
}

2 if結構

2.1 else if多選擇結構

if後可以有若干個else if,一旦其中一個else if語句檢測為true,其他的else if以及else都將跳過執行

package com.liam.struct;

import java.util.Scanner;

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

        System.out.println("請輸入成績:");
        double score = scanner.nextDouble();
        if (score == 100) {
            System.out.println("滿分");
        }else if (score < 100 && score >= 80) {
            System.out.println("優秀");
        }else if (score < 80 && score >= 60) {
            System.out.println("良好");
        }else if(score < 60 && score >= 0){
            System.out.println("不及格");
        }else {
            System.out.println("請正確輸入成績");
        }


        scanner.close();
    }
}

3 switch多選擇結構

3.1 switch語法

  • case有穿透機制,若沒有break那麼會輸出沒有break的所有選項,所以每個case都要加break
  • switch主要功能就是匹配一個具體的值
switch (expression){
    case value :
        //語句
        break;
    case value :
        //語句
        break;
    case value :
        //語句
        break;
    case value :
        //語句
        break;
    default://要是都不符合就會走default
        //語句
  • switch語句中的變數型別可以是:byte、short、int、char
  • 從JavaSE 7開始switch支援String型別了
  • 同時case標籤必須為字串常量或字面量

4 迴圈結構

4.1 while迴圈語法

while(布林表示式){
    //迴圈內容
}

4.2 do...while迴圈語法

do{
    //迴圈內容
}while(布林表示式);
  • do...while和while類似,不同的是,do...while至少會執行一次
  • while是先判斷後執行,do...while是先執行後判斷

4.3 for迴圈語法

for(初始化;布林表示式;更新){
    //迴圈內容
}
  • IDEA可以用數字.for來快速生成for迴圈

練習1:計算0到100之間的奇數和與偶數和

int oddSum = 0;
int evenSum = 0;

for (int i = 1; i <= 100; i++) {
    if (i%2==0){
        evenSum+=i;
    }else {
        oddSum+=i;
    }
}

System.out.println(oddSum+"\n"+evenSum);

練習2:輸出1-1000之間能被5整除的數,並且每行輸出3個

for (int i = 1; i <= 1000; i++) {
    if (i%5==0){
        System.out.print(i+"\t");
    }
    if (i%15==0){
        System.out.print("\n");
    }
}

【注】print和println區別:println全稱print line,輸出完會換行,而print輸出完不會換行

練習3:列印九九乘法表

for (int i = 1; i <= 9; i++) {
    for (int j = 1; j <= i; j++) {
        System.out.print(j+"*"+i+"="+(i*j)+"\t");
    }
    System.out.println("\n");
}

練習4:列印一個5行的等腰三角形

思路:

  • 輸出都用print而不是println,這樣可以一行一行的輸出,輸出的圖形分為三個部分,分別對應三個for迴圈,再加上最外層控制行數量的for迴圈一共四個for迴圈
for (int i = 1; i <= 5; i++) {//最外層控制行數量的for,此處選擇從1開始++而不是從5開始--,如果從5開始--控制4×4直角三角形部分會很麻煩
    for (int j = 5; j > i; j--) {//控制空格(or@)部分的for
        System.out.print("@\t");//把空格換成@可以更直觀理解
    }

    for (int x = 1; x <= i; x++) {//控制4×4直角三角形的for
        System.out.print("*\t");
    }

    for (int y = 1; y < i; y++) {//控制3×3直角三角形的for
        System.out.print("*\t");
    }

    System.out.print("\n");
}

整體圖形由三個部分組成,輸出效果如下圖:

4.4 增強for迴圈

  • Java5引入了一種主要用於陣列或集合的增強型for迴圈
  • 語法如下:for(宣告語句:表示式){//程式碼句子}
  • 宣告語句:宣告新的區域性變數,該變數的型別必須和陣列元素的型別匹配,其作用域限定在迴圈語句塊,其值與此時陣列元素的值相等
  • 表示式:表示式是要訪問的陣列名,或者是返回值為陣列的方法
int[] num = {10,20,30,40,50};
for (int x:num){
    System.out.println(x);//遍歷num陣列
}

4.5 break和continue

  • break用於強行退出迴圈,不執行迴圈中剩餘的語句(break也在switch中使用)
  • continue在迴圈語句中用於終止某次迴圈過程,即跳過i迴圈體中尚未執行的語句,接著進行下一次是否執行迴圈的判定

break

int i = 0;
while (i<100){
    i++;
    if (i==30)
        break;
    System.out.println(i);
}
//輸出結果到29就終止

continue

int i = 0;
while (i<100){
    i++;
    if (i==30)
        continue;
    System.out.println(i);
}
//100以內除了30都輸出成功