JavaSE第04篇:Java基礎語法之循環(huán)結(jié)構(gòu)

本篇將會詳細講解Java基礎語法中的循環(huán)結(jié)構(gòu)、Random對象,并帶有不同的練習,尤其是循環(huán),在軟件開發(fā)中,幾乎無處不在。

第一章:循環(huán)結(jié)構(gòu)

1.1-為什么要學習循環(huán)結(jié)構(gòu)(了解)

比如現(xiàn)有需求:在命令窗口,輸出100行"Hello World"。

若繼續(xù)按照我們以往的方式完成需求,則可能會是類似以下這樣的代碼:

public class Test01 {
    public static void main(String[]args){
        System.out.println("Hello World");
        System.out.println("Hello World");
        System.out.println("Hello World");
        System.out.println("Hello World");
        System.out.println("Hello World");
        System.out.println("Hello World");
        // ...
    }
}

以上代碼雖然也可實現(xiàn)需求的功能,但是我們細品,會發(fā)現(xiàn)以下問題:

  1. 簡單的需求,代碼重復且臃腫。
  2. 若變更輸出內(nèi)容,不易修改和維護。

而在實際工作開發(fā)中,我們不僅只是要完成功能,還要考慮到代碼的質(zhì)量(比如:代碼可以更簡潔一些)。

此時,對于以上的問題,歸根到底,就是代碼連續(xù)重復了。

如何解決連續(xù)重復且讓代碼變更加簡單呢?那就是使用Java語法中提供的循環(huán)語句。

1.2-Java中的循環(huán)語句分類(了解)

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

當反復 執(zhí)行這個循環(huán)體時,需要在合適的時候把循環(huán)判斷條件修改為false,從而結(jié)束循環(huán),否則循環(huán)將一直

執(zhí)行下去,形 成死循環(huán)。

java中有三種循環(huán)結(jié)構(gòu),分別是:

  • for 循環(huán)
  • while 循環(huán)
  • do while 循環(huán)

下面,我們逐一來學習。

1.3-for循環(huán) (重點)

語法格式

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

初始化語句: 用于表示循環(huán)開啟時的起始狀態(tài),簡單說就是循環(huán)開始的時候什么樣。

條件判斷語句:用于表示循環(huán)反復執(zhí)行的條件,簡單說就是判斷循環(huán)是否能一直執(zhí)行下去。

循環(huán)體語句: 用于表示循環(huán)反復執(zhí)行的內(nèi)容,簡單說就是循環(huán)反復執(zhí)行的事情。

條件控制語句:用于表示循環(huán)執(zhí)行中每次變化的內(nèi)容,簡單說就是控制循環(huán)是否能執(zhí)行下去。

執(zhí)行流程

① 執(zhí)行初始化語句

② 執(zhí)行條件判斷語句,看其結(jié)果是true還是false

  • 如果是false,循環(huán)結(jié)束

  • 如果是true,繼續(xù)執(zhí)行

③ 執(zhí)行循環(huán)體語句

④ 執(zhí)行條件控制語句

⑤ 回到②繼續(xù)

image

示例1:控制臺輸出100行"Hello World"

public class Test01 {
    public static void main(String[]args){
        /*
            int i = 1   初始化語句
            i<=100      條件判斷語句
            { System.out.println("Hello World"); } 循環(huán)體語句
            i++         條件控制語句
        */
        for(int i = 1; i<=100; i++){
            System.out.println("Hello World"); 
        }
    }
}

示例2:在控制臺輸出1-5和5-1的數(shù)據(jù)

public class Test02 {
    public static void main(String[]args){
        // 定義循環(huán),循環(huán)輸出1-5之間所有的整數(shù),順序輸出
        for(int i = 1; i<=5; i++){
            System.out.println(i); 
        }
        // 定義循環(huán),循環(huán)輸出1-5之間所有的整數(shù),倒序輸出
        for(int i = 5; i>=1; i--){
            System.out.println(i); 
        }
    }
}

示例3:求1-5之間的數(shù)據(jù)和,并把求和結(jié)果在控制臺輸出

public class Test03 {
    public static void main(String[]args){
        // 定義變量sum,表示總和,初始化為0
        int sum = 0;
        // 循環(huán)遍歷1-5之間所有的數(shù)字,并累計達到變量sum,包括1和5
        for(int i = 1; i<=5; i++){
            sum = sum + i;
        }
        // 輸出結(jié)果:15
        System.out.println(sum);
    }
}

今后遇到的需求中,如果帶有求和二字,請立即聯(lián)想到求和變量

求和變量的定義位置,必須在循環(huán)外部,如果在循環(huán)內(nèi)部則計算出的數(shù)據(jù)將是錯誤的

示例4:求1-100之間的偶數(shù)和,并把求和結(jié)果在控制臺輸出

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

示例5:在控制臺輸出所有的“水仙花數(shù)”

解釋:什么是水仙花數(shù)?

  • 水仙花數(shù),指的是一個三位數(shù),個位、十位、百位的數(shù)字立方和等于原數(shù)

  • 例如 153, 3*3*3 + 5*5*5 + 1*1*1 = 153

實現(xiàn)思路:

  1. 獲取所有的三位數(shù),準備進行篩選,最小的三位數(shù)為100,最大的三位數(shù)為999,使用for循環(huán)獲取

  2. 獲取每一個三位數(shù)的個位,十位,百位,做if語句判斷是否是水仙花數(shù)

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

示例6:統(tǒng)計“水仙花數(shù)”一共有多少個,并在控制臺輸出個數(shù)

public class Test04 { 
    public static void main(String[] args) { 
        //定義變量count,用于保存“水仙花數(shù)”的數(shù)量,初始值為0 
        int count = 0;
        // 輸出所有的水仙花數(shù)必然要使用到循環(huán),遍歷所有的三位數(shù),三位數(shù)從100開始,到999結(jié)束
        for(int i=100; i<1000; i++) { 
            // 在計算之前獲取三位數(shù)中每個位上的值
            int ge = i%10;
            int shi = i/10%10; 
            int bai = i/10/10%10;
            // 在判定水仙花數(shù)的過程中,滿足條件不再輸出,更改為修改count的值,使count+1
            if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i) { 
                count++;
            }
        }
        //打印輸出最終結(jié)果 
        System.out.println("水仙花共有:" + count + "個");
    } 
}

今后如果需求帶有統(tǒng)計xxx,請先想到計數(shù)器變量

計數(shù)器變量定義的位置,必須在循環(huán)外部

1.4-while循環(huán)(重點)

語法格式

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

執(zhí)行流程

① 執(zhí)行初始化語句

② 執(zhí)行條件判斷語句,看其結(jié)果是true還是false

  • 如果是false,循環(huán)結(jié)束

  • 如果是true,繼續(xù)執(zhí)行

③ 執(zhí)行循環(huán)體語句

④ 執(zhí)行條件控制語句

⑤ 回到②繼續(xù)

image

示例1:控制臺輸出100行"Hello World"

public class Test05 { 
    public static void main(String[] args) { 
        int i = 1;
        while(i<=100){
            System.out.println("Hello World");
            i++;
        }
    } 
}

示例2:珠穆拉瑪峰

需求:世界最高山峰是珠穆朗瑪峰(8844.43米=8844430毫米),假如我有一張足夠大的紙,它的厚度是0.1毫米。請問,我折疊多少次,可以折成珠穆朗瑪峰的高度?

public class Test06 {
    public static void main(String[] args) {
        //定義一個計數(shù)器,初始值為0
        int count = 0;
        //定義紙張厚度
        double paper = 0.1;
        //定義珠穆朗瑪峰的高度
        int zf = 8844430;
        //因為要反復折疊,所以要使用循環(huán),但是不知道折疊多少次,這種情況下更適合使用while循環(huán)
        //折疊的過程中當紙張厚度大于珠峰就停止了,因此繼續(xù)執(zhí)行的要求是紙張厚度小于珠峰高度
        while(paper <= zf) {
            //循環(huán)的執(zhí)行過程中每次紙張折疊,紙張的厚度要加倍
            paper *= 2;
            //在循環(huán)中執(zhí)行累加,對應折疊了多少次
            count++;
        }
        //打印計數(shù)器的值
        System.out.println("需要折疊:" + count + "次");
    }
}

1.5-do while循環(huán)(重點)

語法格式:

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

執(zhí)行流程:

① 執(zhí)行初始化語句

② 執(zhí)行循環(huán)體語句

③ 執(zhí)行條件控制語句

④ 執(zhí)行條件判斷語句,看其結(jié)果是true還是false

  • 如果是false,循環(huán)結(jié)束

  • 如果是true,繼續(xù)執(zhí)行

⑤ 回到②繼續(xù)

image

示例:控制臺輸出100行"Hello World"

public class Test07 {
    public static void main(String[] args) {
        int j = 1;
        do {
            System.out.println("Hello World");
            j++;
        }while(j<=100);
    }
}

1.6-三種循環(huán)的區(qū)別(了解)

  • 三種循環(huán)的區(qū)別
    • for循環(huán)和while循環(huán)先判斷條件是否成立,然后決定是否執(zhí)行循環(huán)體(先判斷后執(zhí)行)
    • do...while循環(huán)先執(zhí)行一次循環(huán)體,然后判斷條件是否成立,是否繼續(xù)執(zhí)行循環(huán)體(先執(zhí)行后判斷)
  • for循環(huán)和while的區(qū)別
    • 條件控制語句所控制的自增變量,因為歸屬for循環(huán)的語法結(jié)構(gòu)中,在for循環(huán)結(jié)束后,就不能再次被訪問到了

1.7-死循環(huán)(了解)

死循環(huán),就是循環(huán)永遠不會終止。這里可以推薦一部電影《恐怖游輪》,很是刺激。

死循環(huán)(無限循環(huán))的三種格式

  1. for(;;){}
  2. while(true){}
  3. do {} while(true);

1.8-跳轉(zhuǎn)控制語句(重點)

break和continue

  • 跳轉(zhuǎn)控制語句(break)
    • 跳出循環(huán),結(jié)束循環(huán)
  • 跳轉(zhuǎn)控制語句(continue)
    • 跳過本次循環(huán),繼續(xù)下次循環(huán)
  • 注意: continue只能在循環(huán)中進行使用!

示例

/* break 關鍵字 */
// 如:連續(xù)吃5個包子,吃到第3個,吃飽了,后面第包子就不吃了
for(int i = 1; i <=5; i++){
    if(i==3){
        System.out.println("吃飽了");
        break;
    }
    System.out.println("吃第" + i + "個包子");
}

/* continue關鍵字 */
// 如:連續(xù)吃5個包子,吃到第3個時掉地上了,則第3個包子就不吃了,繼續(xù)吃后面的包子
for (int i = 1; i <=5 ; i++) {
    if(i==3){
        System.out.println("第" + i+ "包子掉地上了");
        continue;
    }
    System.out.println("吃第" + i + "個包子");
    
}

1.9-循環(huán)嵌套(理解)

在循環(huán)中,繼續(xù)定義循環(huán),就是循環(huán)嵌套。

需求:在控制臺輸出一天24小中,每一個小時對應的每一分鐘。

如:
0時0分
0時1分
...
23時0分
23時1分

代碼示例

    public static void main(String[] args) {
        //外循環(huán)控制小時的范圍,內(nèi)循環(huán)控制分鐘的范圍
        for (int hour = 0; hour < 24; hour++) {
            for (int minute = 0; minute < 60; minute++) {
                System.out.println(hour + "時" + minute + "分");
            }
            System.out.println("--------");
        }
    }

請反復理解這句話(整個內(nèi)循環(huán),就是外循環(huán)的一個循環(huán)體,內(nèi)部循環(huán)體沒有執(zhí)行完畢,外循環(huán)是不會繼續(xù)向下執(zhí)行的)。

外循環(huán)執(zhí)行一次,內(nèi)循環(huán)執(zhí)行一圈。

第二章:Random

2.1-Random是什么(了解)

Random類似Scanner,也是Java提供好的API,內(nèi)部提供了產(chǎn)生隨機數(shù)的功能。

關于API,我們后續(xù)會詳解講解,現(xiàn)在可以簡單把API理解為Java已經(jīng)寫好的代碼,我們可以直接按照步驟使用。

2.2-Random使用步驟(重點)

步驟

步驟1:導入包

import java.util.Random;

步驟2:創(chuàng)建對象

Random r = new Random();

步驟3:產(chǎn)生隨機數(shù)

int num = r.nextInt(10);

解釋: 10代表的是一個范圍,如果括號寫10,產(chǎn)生的隨機數(shù)就是0-9,括號寫20,參數(shù)的隨機數(shù)則是0-19

代碼

// 導包
import java.util.Random;
public class RandomDemo {
    public static void main(String[] args) {
        // 創(chuàng)建對象
        Random r = new Random();
        // 用循環(huán)獲取10個隨機數(shù)
        for(int i=0; i<10; i++) {
            // 獲取隨機數(shù)
            int number = r.nextInt(10);
            System.out.println("number:" + number);
        }
        // 需求:獲取一個1-100之間的隨機數(shù)
        int x = r.nextInt(100) + 1;
        System.out.println(x);
    }
}

2.3-案例-猜數(shù)字(練習)

需求:

程序自動生成一個1-100之間的數(shù)字,使用程序?qū)崿F(xiàn)猜出這個數(shù)字是多少?

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

  • A. 如果猜的數(shù)字比真實數(shù)字大,提示你猜的數(shù)據(jù)大了

  • B. 如果猜的數(shù)字比真實數(shù)字小,提示你猜的數(shù)據(jù)小了

  • C. 如果猜的數(shù)字與真實數(shù)字相等,提示恭喜你猜中了

代碼

import java.util.Random;
import java.util.Scanner;

public class RandomTest {
    public static void main(String[] args) {
        //要完成猜數(shù)字的游戲,首先需要有一個要猜的數(shù)字,使用隨機數(shù)生成該數(shù)字,范圍1到100
        Random r = new Random();
        int number = r.nextInt(100) + 1;
        
        while(true) {
            //使用程序?qū)崿F(xiàn)猜數(shù)字,每次均要輸入猜測的數(shù)字值,需要使用鍵盤錄入實現(xiàn)
            Scanner sc = new Scanner(System.in);
            
            System.out.println("請輸入你要猜的數(shù)字:");
            int guessNumber = sc.nextInt();
            
            // 比較輸入的數(shù)字和系統(tǒng)產(chǎn)生的數(shù)據(jù),需要使用分支語句。
            // 這里使用if..else..if..格式,根據(jù)不同情況進行猜測結(jié)果顯示
            if(guessNumber > number) {
                System.out.println("你猜的數(shù)字" + guessNumber + "大了");
            } else if(guessNumber < number) {
                System.out.println("你猜的數(shù)字" + guessNumber + "小了");
            } else {
                System.out.println("恭喜你猜中了");
                break;
            }
        }
        
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容