Java學習筆記之switch & 循環語句


0x00 概述

本篇內容包括switch語句,for循環,while循環,random函數。

 

0x01 switch語句

1.1 switch語句結構

格式

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

執行流程

/*
1. 首先計算出表達式的值 2. 其次,和case依次比較,一旦有對應的值,就會執行相應的語句,在執行過程中,遇到break就會結束 3. 最后,如果所有的case都和表達式的值不匹配,就會執行default語句體部分,然后程序結束 */
/*
    switch語句
    
    格式:
        switch(表達式) {
            case 值1:
            語句體1;
            break;
            case 值2:
            語句體2;
            break;
            …
            default:    
            語句體n+1;
            [break;]
        }

    格式說明:
        表達式:取值為byte、short、int、char,JDK5以后可以是枚舉,JDK7以后可以是String。
        case:后面跟的是要和表達式進行比較的值。
        break:表示中斷,結束的意思,用來結束switch語句。
        default:表示所有情況都不匹配的時候,就執行該處的內容,和if語句的else相似。

    執行流程:
        首先計算表達式的值。
        依次和case后面的值進行比較,如果有對應的值,就會執行相應的語句,在執行的過程中,遇到break就會結束。
        如果所有的case后面的值和表達式的值都不匹配,就會執行default里面的語句體,然后程序結束掉。
*/    

import java.util.Scanner;

public class SwitchDemo {
    public static void main(String[] args) {
        System.out.println("開始");
        
        //需求:鍵盤錄入一個星期數(1,2,...7),輸出對應的星期一,星期二,...星期日
        Scanner sc = new Scanner(System.in);
        
        System.out.println("請輸入一個星期數(1-7):");
        int week = sc.nextInt();
        
        switch(week) {
            case 1:
                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;
            case 6:
                System.out.println("星期六");
                break;
            case 7:
                System.out.println("星期日");
                break;
            default:
                System.out.println("你輸入的星期數有誤");
                break;
        }
        
        System.out.println("結束");
    }
}

 

1.2 switch語句聯系-春夏秋冬

需求: 一年有12個月,分屬於春夏秋冬4個季節,鍵盤錄入月份,請用程序實現判斷該月份屬於哪個季節,並輸出。

/*
春:3,4,5
夏:6,7,8
秋:9,10,11
東:12,1,2
*/

示例

import java.util.Scanner;

public class demo1 {
    public static void main(String[] args) {
        // 鍵盤錄入月份數據,使用變量接收
        Scanner sc = new Scanner(System.in);
        System.out.println("請輸入一個月份: ");
        int month = sc.nextInt();
        // case穿透
        switch (month) {
            case 1:
            case 2:
            case 12:
                System.out.println("冬季");
                break;
            case 3:
            case 4:
            case 5:
                System.out.println("春季");
                break;
            case 6:
            case 7:
            case 8:
                System.out.println("夏季");
                break;
            case 9:
            case 10:
            case 11:
                System.out.println("秋季");
                break;
            default:
                System.out.println("你輸入的月份有誤");
        }
    }
}

注意:如果switch中的case,沒有break的話,則會出現case穿透現象。

 

0x02 for循環

2.1 for循環結構

循環:

循環語句可以在滿足循環條件的情況下,反復執行某一段代碼,這段被重復執行的代碼被稱為循環體語句,

當反復 執行這個循環體時,需要在合適的時候把循環判斷條件修改為false,從而結束循環,否則循環將一直執行下去,形 成死循環。

for循環格式:

for(初始化語句;條件判斷語句;條件控制語句) {
    循環體語句;
}

格式解釋:

  • 初始化語句:用於表示循環開啟時的起始狀態,簡單說就是循環開始的時候什么樣
  • 條件判斷語句:用於表示循環反復執行的條件,簡單說就是判斷循環能否一直執行下去
  • 循環體語句:用於表示循環反復執行的內容,簡單說就是循環反復執行的事情
  • 條件控制語句:用於表示循環執行中每次變化的內容,簡單說就是控制循環是否能執行下去

執行流程:

  1.  執行初始化語句
  2.  執行條件判斷語句,看其結果是true還是false,如果是false,循環結束,如果是true,繼續執行
  3.  執行循環體語句
  4.  執行條件控制語句
  5.  回到2繼續

 

2.2 for循環練習-輸出數據

需求:在控制台輸出1-5和5-1的數據

示例

public class fortest01 {
    public static void main(String[] args) {
        //需求:輸出數據1-5
        for(int i = 1; i <= 5; i++) {
            System.out.println(i);
        }
        System.out.println("--------------------");
        for(int j = 5; j >= 1; j--) {
            System.out.println(j);
        }
    }
}

 

2.3 循環練習-求和

需求:求1-5之間的數據和,並把求和結果在控制台輸出

示例:

public class forTest02 {
    public static void main(String[] args) {
        //求和的最終結果必須保存起來,需要定義一個變量,用於保存求和的結果,初始值為
        int sum = 0;
        // 從1凱斯到5結束,使用循環結構
        for(int i = 1; i <= 5; i++) {
            // 將反復進行的事情寫入循環結構內部
            // 此處反復進行的事情是將數據i,加到用於保存最終求和的變量sum中
            sum += i;
            /*
                sum += i; sum = sum + i;
                第一次: sum = sum + i = 0 + 1 = 1;
                第二次: sum = sum + i = 1 + 2 = 3;
                第三次: sum = sum + i = 3 + 3 = 6;
                ...
                第五次: sum = sum + i = 10 + 5 =15
             */
        }
        // 當循環執行完畢時,將最終數據打印出來
        System.out.println("1-5之間的數據和是: " + sum);
    }
}

本題要點:

  • 今后遇到的需求中,如果帶有求和二字,請立即聯想到求和變量,用於寄存數據;
  • 求和變量的定義位置,必須在循環外部,如果在循環內部則計算出的數據是錯誤的;

 

2.4 for循環練習-求偶數和

需求:求1-100之間的偶數之和,並把求和結果在控制台輸出

示例

public class forTest03 {
    public static void main(String[] args) {
        // 求和的最終結果必須保存起來,需要定義一個變量,用於保存求和的結果,初始值為
        int sum = 0;
        // 對1-100的數據求和和對1-5的數據求和幾乎完全一樣,僅僅是結束條件不同
        for (int i = 1; i <= 100; i++) {
            // 對1-100的偶數求和,需要對求和操作添加限制條件,判斷是否是偶數
            if (i %2 == 0) {
                sum += i;
            }
        }
        // 當循環執行完畢時,將最終數據打印出來
        System.out.println("1-100之間的偶數之和是:" + sum);
    }
}

 

2.5 for循環練習-水仙花

需求:在控制台輸出100-1000之內所有的“水仙花數”

解釋: 水仙花數是指,一個三位數,其個位,十位,百位的數字立方和等於原數;例如3*3*3 + 5*5*5 + 1*1*1 = 153

思路:

  1.  獲取100-1000之內所有的三位數,准備進行篩選,最小的三位數是100,最大的三位數是999,使用for循環獲取
  2.  獲取每個三位數的個位,十位,百位,做if語句判斷是否是水仙花數

示例:

public class forTest04 {
    public static void main(String[] args) {
        // 輸出所有水仙花數必然使用到循環,遍歷所有的三位數,三位數從100開始,到999結束
        for(int i = 100; i < 1000; i++) {
            // 在計算之前獲取三位數中個,十,百位上的數值
            int ge = i % 10;
            int shi = i /10 %10;
            int bai = i /10 /10 %10;
            // 判斷條件是將三位書中的每個數值取出來,計算立方和后與原始數字比較是否相等
            if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i) {
                System.out.println(i);
            }
        }
    }
}

 

2.6 for循環練習-統計水仙花數的個數

需求:輸出水仙花數的個數

示例:

public class fortest05 {
    public static void main(String[] args) {
        // 定義變量count,用於保存"水仙花數"的數量,初始值為0
        int count = 0;
        // 輸出所有的水仙花數使用循環,遍歷所有三位數,100-999
        for (int i = 100; i < 1000; i++) {
            // 獲取個 十 百 位上的數值
            int ge = i % 10;
            int shi = i / 10 % 10;
            int bai = i / 10 / 10 %10;
            //在判斷水仙花數的過程中,滿足條件就不再輸出,此處變更為更新count值,使count+1
            if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i) {
                count++;
            }
         }
        // 打印輸出最終的count值
        System.out.println("水仙花共有:" + count + "個")
    }
} 

本題要點:

  • 今后如果有需求帶有統計xxxx,請先想到計算器變量
  • 計算器變量定義的位置,必須在循環外部

 

0x03 while循環

3.1 while結構

while的循環的完整格式:

初始化語句;
while(條件判斷語句) {
    循環體語句;
    條件控制語句;
}

while循環執行流程:

  1.  執行初始化語句
  2.  執行條件判斷語句,看其結果是true還是false;如果是false,循環結束;如果是true,繼續執行
  3.  執行循環體語句
  4.  執行條件控制語句
  5.  回到2繼續 
public class whiledemo {
    public static void main(String[] args) {
        // 需求:在控制台輸出5次helloworld
        // 使用for循環實現
        for (int i = 1; i <= 5; i++) {
            System.out.println("HelloWorld");
        }
        System.out.println("---------------");
        // 使用while循環實現
        int j = 1;
        while(j <= 5) {
            System.out.println("HelloWorld");
            j ++;
        }
    }
}

 

3.2 while循環-珠穆朗瑪峰

需求:世界最高峰珠穆朗瑪峰高度位8843.43米=8843430毫米,假如我有一張足夠大的紙張,他的厚度為0.1毫米;請問折疊多少次,可以超過珠峰的高度

示例:

public class whiletest {
    public static void main(String[] args) {
        // 定義一個計算器,初始值為0
        int count = 0;
        // 定義紙張厚度
        double paper = 0.1;

        // 定義珠峰高度
        int zf = 8844430;
        // 因為要反復折疊,所以要使用循環,但是不知道要折疊多少次,這種情況下使用while循環比較合適
        // 折疊的過程中,當紙張的厚度大於珠峰就停止,因此繼續執行的要求是紙張厚度小於珠峰高度
        while (paper < zf) {
            // 循環的執行過程中每次紙張折疊,紙張的厚度翻倍
            paper *= 2;
            // 在循環中執行累加,對應折疊了多少次
            count++;
        }
        // 打印計數器的值
        System.out.println("需要折疊的次數:"+count+" 次");
    }
}

  

0x04 循環細節

4.1 do...while循環結構

格式

初始化語句;
do {
    循環體語句;
    條件控制語句;
} while(條件判斷語句);

 執行流程:

  1.  執行初始化語句
  2.  執行循環體語句
  3.  執行條件控制語句
  4.  執行條件判斷語句,看其結果是true還是false,如果是false,循環結束,如果是true,繼續執行
  5.  回到2繼續
public class dowhileDemo {
    public static void main(String[] args) {
        // 需求:在控制台輸出5次helloworld
        // for循環實現
        for (int i = 1; i <= 5; i++) {
            System.out.println("HelloWorld");
        }
        System.out.println("--------------");
        // do...while實現
        int j = 1;
        do {
            System.out.println("HelloWorld");
            j++;
        }while(j <= 5);
    }
}

  

4.2 三種循環的區別

  • 三種循環的區別
/*
for循環和while循環先判斷條件是否成立,然后決定是否執行循環體(先判斷后執行)

do...while循環先執行一次循環體,然后判斷條件是否成立,是否繼續執行循環體(先執行后判斷)
*/
  • for循環和while循環的區別
/*
條件控制語句所控制的自增變量,因為歸屬for循環的語法結構中,在for循環結束后,就不能再次被訪問到了

條件控制語句所控制的自增變量,對於while循環來說不歸屬其語法結構中,在while循環結束后,該變量還可以繼續使用
*/
  • 死循環(無限循環)的三種格式
/*

1. for(;;) {}

2. while(true){}

3. do {} while(true);

*/

示例

/*
    三種循環的區別
 */
public class LoopTest {
    public static void main(String[] args) {

        //for循環
        for(int i = 3; i<3; i++) {
            System.out.println("我愛Java");
        }
        System.out.println("--------");
        
        //while循環
        int j = 3;
        while(j<3) {
            System.out.println("我愛Java");
            j++;
        }
        System.out.println("--------");
        
        //do...while循環
        int k = 3;
        do {
            System.out.println("我愛Java");
            k++;
        }while(k<3);

        //for循環
        for(int i = 1; i<3; i++) {
            System.out.println("我愛Java");
        }
        // 此處無法打印出i的值,i僅限上面for循環內不使用,外部無法調用
        //System.out.println(i);
        System.out.println("--------");
        
        //while循環
        int j = 1;
        while(j<3) {
            System.out.println("我愛Java");
            j++;
        }
        // 此處打印j的值正常,while循環外,j值可以被調用
        System.out.println(j);
        System.out.println("--------");
        */
        
        //死循環
        /*
        for(;;) {
            System.out.println("for");
        }
        */
        
        /*
        while(true) {
            System.out.println("while");
        }
        */
        
        /*
        do {
            System.out.println("do...while");
        }while(true);
        */
        
    }
}

 

4.3 跳轉控制語句

/*

跳轉控制語句(break)跳出循環,結束循環

跳轉控制語句(continue),跳過本次循環,繼續下次循環

注意: continue只能在循環中進行使用!

*/

示例

/*
    continue:用在循環中,基於條件控制,跳過某次循環體內容的執行,繼續下一次的執行
    break:用在循環中,基於條件控制,終止循環體內容的執行,也就是說結束當前的整個循環
*/
public class ControlDemo {
    public static void main(String[] args) {
        for(int i = 1; i<=5; i++) {
            if(i%2 == 0) {
                //continue;
                break;
            }
            
            System.out.println(i);
        }
    }
}

 

4.4 循環嵌套

/*
請反復理解這句話(整個內循環,就是外循環的一個循環體,內部循環體沒有執行完畢,外循環是不會繼續向下執行的)結論:
外循環執行一次,內循環執行一圈
*/

示例

/*
    循環嵌套:
        循環語句中包含循環語句
    
    需求:
        在控制台輸出一天的小時和分鍾
        
        分鍾和小時的范圍:
            分鍾:0 <= minute < 60
            小時:0 <= hour < 24
*/
public class ForForDemo {
    public static void main(String[] args) {
        /*
        System.out.println("0時0分");
        System.out.println("0時1分");
        System.out.println("0時2分");
        System.out.println("0時3分");
        System.out.println("--------");
        System.out.println("1時0分");
        System.out.println("1時1分");
        System.out.println("1時2分");
        System.out.println("1時3分");
        System.out.println("--------");
        System.out.println("2時0分");
        System.out.println("2時1分");
        System.out.println("2時2分");
        System.out.println("2時3分");
        */
        
        //循環改進
        /*
        for(int minute=0; minute<4; minute++) {
            System.out.println("0時" + minute + "分");
        }
        System.out.println("--------");
        
        for(int minute=0; minute<4; minute++) {
            System.out.println("1時" + minute + "分");
        }
        System.out.println("--------");
        
        for(int minute=0; minute<4; minute++) {
            System.out.println("2時" + minute + "分");
        }
        System.out.println("--------");
        */
        
        //外循環控制小時的范圍,內循環控制分鍾的范圍
        /*
        for(int hour=0; hour<3; hour++) {
            for(int minute=0; minute<4; minute++) {
                System.out.println(hour + "時" + minute + "分");
            }
            System.out.println("--------");
        }
        */
        
        for(int hour=0; hour<24; hour++) {
            for(int minute=0; minute<60; minute++) {
                System.out.println(hour + "時" + minute + "分");
            }
            System.out.println("--------");
        }
    }
}

 

0x05 Random函數

5.1 Random產生隨機數

Random類似Scanner,也是Java提供好的API,內部提供了產生隨機數的功能

API后續課程詳細講解,現在可以簡單理解為Java已經寫好的代碼,使用步驟:

1. 導入包

import java.util.Random;

2. 創建對象

Random r = new Random();

3. 產生隨機數

int num = r.nextInt(10);

/*
解釋: 10代表的是一個范圍,如果括號寫10,產生的隨機數就是0-9,括號寫20,參數的隨機數則是0-19
*/

示例

import java.util.Random;

public class randomDemo {
    public static void main(String[] args) {
        //創建對象
        Random r = new Random();
        // 使用循環獲取10個隨機數
        for (int i = 0; i < 10; i++) {
            // 獲取隨機數
            int num = r.nextInt(10);
            System.out.println("number: "+num);
        }
        // 需求:獲取一個1-100之間的隨機數
        int x = r.nextInt(100) + 1;
        System.out.println(x);
    }
}

 

5.2 Random練習-猜數字

需求:程序自動生成一個1-100之間的數字,使用程序實現猜出這個數字是多少;

當猜錯的時候根據不同情況給出相應的提示

  • 如果猜的數字比真實數字大,提示你猜的數據大了
  • 如果猜的數字比真實數字小,提示你猜的數據小了
  • 如果猜的數字與真實數字相等,提示恭喜你猜中了示例代碼:
import java.util.Random;
import java.util.Scanner;

public class randomTest {
    public static void main(String[] args) {
        //要完成猜數字游戲,首先需要有一個要猜的數字,使用隨機數生成該數字,范圍1-100
        Random r = new Random();
        int num = r.nextInt(100) + 1;
        
        while(true) {
            // 使用程序實現猜數字,每次均要輸入猜測的數字值,需要使用鍵盤錄入實現
            Scanner sc = new Scanner(System.in);
            System.out.println("請輸入你要猜的數字: ");
            int guessNum = sc.nextInt();
            
            // 比較輸入的數字和系統產生的數據,需要使用分支語句
            // 這里使用if...else..if..格式,根據不同情況進行猜測結果顯示
            if(guessNum > num) {
                System.out.println("你猜的數字"+guessNum+"大了。");
            } else if(guessNum < num) {
                System.out.println("你猜的數字"+guessNum+"小了。");
            } else {
                System.out.println();
                break;
            }
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM