3. Java程式流程式控制制(重點) 程式的三種控制結構 3.1 分支結構 if, switch 3.1.1 if if 分支 根據條件(真或假)來決定執行某段代碼。 if分支應用場景 if 第一種形式 執行流程: 首先判斷條件表達式的結果,如果為true執行語句體,為false就不執行語句體。 if ...
3. Java程式流程式控制制(重點)
- 程式的三種控制結構
3.1 分支結構 if, switch
3.1.1 if
-
if 分支
- 根據條件(真或假)來決定執行某段代碼。
-
if分支應用場景
-
if 第一種形式
- 執行流程:
- 首先判斷條件表達式的結果,如果為true執行語句體,為false就不執行語句體。
-
if 第二種形式
- 執行流程:
- 首先判斷條件表達式的結果,如果為true執行語句體1,為 false 就執行語句體2。
-
if 第三種形式
- 執行流程:
- 先判斷條件1的值,如果為true則執行語句體1,分支結束;如果為false則判斷條件2的值
- 如果值為true就執行語句體2,分支結束;如果為false則判斷條件3的值
- ...
- 如果沒有任何條件為true,就執行else分支的語句體n+1。
-
總結
- if分支的作用是什麼?
可以根據條件,選擇執行某段程式 - if分支的寫法有幾種?
- if分支的作用是什麼?
-
多學一招: if使用的幾個常見問題
- 如果if語句的{}中只有一行代碼的情況,{}可以省略不寫(但是不推薦省略).
- if(條件){},()後不能跟“;”否則{}中的代碼將不受if的控制了.
-
練習: 用戶登錄
package com.itheima.a_if;
import java.util.Scanner;
/**
* @author: LXHYouth
* @date: 2024/3/3 11:39
* @description:
*/
/*
if 案例: 用戶登錄
需求: 鍵盤錄入用戶名和密碼
如果用戶名不是1, 程式輸出:用戶名錯誤
如果密碼不是2, 程式輸出:密碼錯誤
如果用戶名和密碼沒問題, 程式輸出:登錄成功
提示:
使用Scanner接收用戶輸入的信息,並使用變數接收
使用if...else if...else 組織程式邏輯
*/
public class Demo03 {
public static void main(String[] args) {
// 1. 創建一個自己的掃描器
Scanner sc= new Scanner(System.in);
// 2.提示用戶輸入用戶名
System.out.print("請輸入用戶名: ");
int name = sc.nextInt();
// 提示用戶輸入密碼
System.out.print("請輸入密碼: ");
int passWord= sc.nextInt();
if(name!=1){
System.out.println("用戶名錯誤!!!");
}else if(passWord!=2){
System.out.println("密碼錯誤!!!");
}else{
System.out.println("登錄成功!!!");
}
}
}
3.1.2 switch
- switch分支
- 是通過比較值來決定執行哪條分支。
- switch分支的執行流程
- 先執行表達式的值,再拿著這個值去與case後的值進行匹配。
- 與哪個case後的值匹配為true就執行哪個case塊的代碼,遇到break就跳出switch分支。
- 如果全部case後的值與之匹配都是false,則執行default塊的代碼。
- if跟switch的比較
- if適合做區間匹配,功能更加強大.
- switch適合做值匹配,性能更好.
- 總結:
- switch分支的格式、執行流程是怎麼樣的?
- if、switch的區別有哪些?
- if適合做區間匹配,功能更加強大.
- switch適合做值匹配,性能更好.
- switch分支的格式、執行流程是怎麼樣的?
3.1.3 switch使用時註意事項
- 使用switch分支的幾點註意事項
- 表達式類型只能是byte、short、int、char,JDK5開始支持枚舉,JDK7開始支持String,不支持double、float、long。
- case給出的值不允許重覆,且只能是字面量,不能是變數。
- 正常使用switch的時候,不要忘記寫break,否則會出現穿透現象。
- 當case中沒有寫break時,就會開啟穿透,後續的case不再匹配,直接執行, 直到遇到下一個break或者整個switch執行完畢後才結束, 穿透現象是可以加以利用, 優化代碼的.
3.1.4 總結
- 使用switch時有哪些註意事項?
- 表達式類型可以是byte、short、int、char、枚舉、String,不能是double、float、long
- case給出的值不允許重覆,且只能是字面量,不能是變數.
- 正常使用switch的時候,不要忘記寫break,否則會出現穿透現象。
- switch穿透性能解決什麼問題?
- 存在多個case分支的代碼是一樣時,可以把代碼寫到一個case塊,其他case塊通過穿透性能,穿透到該case塊即可,這樣可以簡化代碼。
- 案例:
package com.itheima.b_switch;
import java.util.Scanner;
/**
* @author: LXHYouth
* @date: 2024/3/3 11:39
* @description:
*/
/*
分支結構 switch
1. 使用待匹配的值去匹配對應的case值, 執行對應的語句體, 遇到break就結束switch語句
2. 所有的case都匹配不到,則執行default中的語句體
switch(待匹配的值){
case 值1:
語句體1;
break;
case 值2:
語句體2;
break;
....
case 值n:
語句體n;
break;
default:
語句體;
break;
}
*/
/*
switch註意事項:
1. 表達式類型只能是byte、short、int、char,JDK5開始支持枚舉,JDK7開始支持String、不支持double、float、long。
2. case給出的值不允許重覆,且只能是字面量,不能是變數。
3. 正常使用switch的時候,不要忘記寫break,否則會出現穿透現象。
switch的case穿透
當case中沒有寫break時,就會開啟穿透,後續的case不再匹配,直接執行,直到遇到下一個break或者整個switch執行完畢後才結束
穿透現象是可以加以利用, 優化代碼的
*/
public class Demo01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//需求: 根據今天星期幾, 判斷是工作還是休息
System.out.print("請輸入今天星期幾: ");
int weekDay= sc.nextInt();
switch(weekDay){
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("輸入錯誤!!!");
}
//需求: 根據定義的月份month,輸出對應的季節
// 3、4、5:春季
//6、7、8:夏季
//9、10、11:秋季
//其它 : 輸入月份有誤
// 如果發現上下有多個case下的代碼完全能相同, 可以利用穿透現象進行簡寫,只寫最後一個case里的代碼
System.out.print("請輸入月份: ");
int month = sc.nextInt();
switch(month){
case 12:
case 1:
case 2:
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("輸入月份有誤!!!");
}
}
}
3.2 迴圈結構 for, while, do-while
3.2.1 for迴圈
- for迴圈
- 控制一段代碼反覆執行很多次。
- 應用場景
- for迴圈格式
for(初始化語句 ; 條件判斷語句; 條件變更語句 ) {
迴圈體語句 ; //要重覆執行的代碼
}
// 輸出3次hello world
for (
int i = 1;
i <= 3;
i++
) {
System.out.println(“hello world");
}
-
for迴圈總結:
- for迴圈格式和執行流程是什麼樣的?
for(初始化語句 ; 條件判斷語句; 條件變更語句 ) { 迴圈體語句 ; //要重覆執行的代碼 }
// 輸出3次hello world for (int i = 1; i <= 3; i++) { System.out.println(“hello world"); }
- for迴圈的作用是什麼?
- 減少代碼的重覆編寫,靈活的控製程序的執行。
3.2.2 for迴圈案例
- 案例一: 求和
-
需求:求1-10之間的奇數和,並把求和結果在控制台輸出。
-
分析:
- 使用for迴圈依次產生:1、2、3、4、5。
for (int i = 1; i <= 5; i++) { }
- 在迴圈外定義一個int類型的變數sum用於求和,迴圈每產生一個數,就加到sum中去
int sum = 0; for (int i = 1; i <= 5; i++) { sum += i; }
- 迴圈結束後,輸出求和變數即是結果。
package com.itheima.c_for;
/**
* @author: LXHYouth
* @date: 2024/3/3 11:39
* @description:
*/
/*
for案例:
需求:求1-5之間的數據和,並把求和結果在控制台輸出。
*/
public class Demo02 {
public static void main(String[] args) {
//思路:
//1.首先使用for遍歷出1~5的數, 可以使用計數器i.
//2. 然後在for迴圈中依次進行累加 如: sum +=i.
int sum=0;
for(int i=1;i<6;i++){
sum +=i;
}
System.out.println("1~5之間的數據和為: "+ sum);
}
}
- 案例二: 求奇數和
-
需求:求1-10之間的奇數和,並把求和結果在控制台輸出。
-
方式一:
- 定義for迴圈,使其能夠依次產生:1、2、3、4、5… 10。
- 在迴圈外定義一個int類型的變數sum用於求和
- 迴圈每產生一個數據,都通過if判斷其是否是奇數,是奇數,則進到if中將其加到sum中去。
for (int i = 1; i <= 10 ; i++) { if(i % 2 == 1){ // i = 1 3 5 7 9 } } //或者這樣 for (int i = 1; i < 11; i++) { if (i%2!=0) { } }
-
方法二:
- 定義for迴圈,使其能夠依次產生:1、3、5 、7 、9
for (int i = 1; i <= 10; i+=2) { }
- 在迴圈外定義一個整數變數sum,迴圈每產生一個數據就加到sum中去。
- 迴圈結束後,輸出sum變數即可。
-
完整代碼
package com.itheima.c_for;
/**
* @author: LXHYouth
* @date: 2024/3/3 11:39
* @description:
*/
/*
需求:求1-10之間的奇數和,並把求和結果在控制台輸出。
*/
public class Demo03 {
public static void main(String[] args) {
//思路:
//1. 先用for迴圈遍歷出1~10所有數
//2. 使用if語句判斷, 剔除所有偶數
//3. 最後對遍歷出的所有奇數進行累加.
int sum=0;
for (int i = 1; i < 11; i++) {
if (i%2!=0) {
// System.out.println(i); //查看一下是否全為奇數
sum +=i;
}
}
System.out.println("1~10中所有的奇數和為: "+ sum);
}
}
- 案例三: 求水仙花數
-
需求:在控制台輸出所有的“水仙花數”,水仙花數必須滿足如下2個要求:
- 水仙花數是一個三位數
- 水仙花數的個位、十位、百位的數字立方和等於原數
-
分析:
- 定義一個for迴圈從“100一直到999”。
- 每次訪問到數據後,提取該數據的:個位、十位、百位數字。
- 使用if判斷:個位、十位、百位的數字立方和是否等於原數,等於則輸出該數據。
公式總結: 個位 :數值 % 10 十位 :數值 / 10 % 10 百位 :數值 / 10 / 10 % 10 千位 :數值 / 10 / 10 / 10 % 10; ...
- 完整代碼:
package com.itheima.c_for;
/**
* @author: LXHYouth
* @date: 2024/3/3 11:39
* @description:
*/
/*
for案例: 求水仙花數
1. 水仙花數是一個三位數
2. 水仙花數的個位、十位、百位的數字立方和等於原數
擴展: 如果還要知道水仙花數的個數怎麼辦?
*/
public class Demo04 {
public static void main(String[] args) {
//思路:
//先定義三個變數來保存三位數的個位、十位、百位的數.
//再定義一個temp來臨時保存個位、十位、百位的數字立方和.
//判斷temp 是否與i相等, 如果相等就位水仙花數.
//輸出每一個水仙花數.
int a,b,c,temp;
System.out.print("所有的水仙花數為:");
for (int i = 100; i <1000; i++) {
a=i%10;
b=i/10%10;
c=i/100%10;
temp=a*a*a+b*b*b+c*c*c;
if(i==temp){
System.out.print(temp+", ");
}
}
}
}
3.2.3 while迴圈
- while 迴圈
初始化語句;
while (條件判斷語句) {
迴圈體語句;//被重覆執行的代碼
條件變更語句;
}
int i = 1;
while (i <= 3) {
System.out.println("Hello World");
i++;
}
-
執行流程:
- 迴圈一開始,執行int i = 1 一次。
- 此時 i=2 ,接著電腦執行迴圈條件語句:1 <= 3 返回true , 電腦就進到迴圈體中執行,輸出 :helloWorld ,然後執行迭代語句i++。
- 此時 i=2 ,接著電腦執行迴圈條件語句:2 <= 3 返回true , 電腦就進到迴圈體中執行,輸出 :helloWorld ,然後執行迭代語句i++。
- 此時 i=3 ,接著電腦執行迴圈條件語句:3 <= 3 返回true , 電腦就進到迴圈體中執行,輸出 :helloWorld ,然後執行迭代語句i++。
- 此時 i=4 ,然後判斷迴圈條件:4 <= 3 返回false, 迴圈立即結束!!
-
while總結
初始化語句;
while (條件判斷語句) {
迴圈體語句;//被重覆執行的代碼
條件變更語句;
}
int i = 1;
while (i <= 3) {
System.out.println("Hello World");
i++;
}
- 入門案例:
package com.itheima.d_while;
/**
* @author: LXHYouth
* @date: 2024/3/3 11:39
* @description:
*/
/*
迴圈結構: while
格式:
初始化語句;
while (條件判斷語句) {
迴圈體語句;//被重覆執行的代碼
條件變更語句;
}
執行過程:
1. 執行一次初始化語句
2. 執行條件判斷語句
如果不成立, 迴圈結束
如果成立, 執行一次迴圈體
3. 執行條件變更語句
4. 重覆2、3步驟
*/
public class Demo01 {
public static void main(String[] args) {
//需求1: 使用while迴圈列印5次HelloWorld
int i=0;
while(i<5){
System.out.println("HelloWorld");
i++;
}
//需求2: 說出上面程式的執行順序
//定義一個迴圈變數i=0.
//進入判斷語句, 0<5為true, 進入迴圈體列印HelloWorld, 再進行i自加
//進入判斷語句, 1<5為true, 進入迴圈體列印HelloWorld, 再進行i自加
//進入判斷語句, 2<5為true, 進入迴圈體列印HelloWorld, 再進行i自加
//進入判斷語句, 3<5為true, 進入迴圈體列印HelloWorld, 再進行i自加
//進入判斷語句, 4<5為true, 進入迴圈體列印HelloWorld, 再進行i自加
//進入判斷語句, 5<5為false, 跳出for迴圈
}
}
3.2.4 while迴圈案例
- 案例: 紙張摺疊成珠穆朗瑪峰的高度
- 需求:世界最高山峰珠穆朗瑪峰高度是:8848.86米=8848860毫米,假如我有一張足夠大的紙,它的厚度是0.1毫米。請問:該紙張摺疊多少次,可以折成珠穆朗瑪峰的高度?
- 分析
- 定義變數存儲珠穆朗瑪峰的高度、紙張的高度。
double peakHeight = 8848860; // 山峰高度
double paperThickness = 0.1; // 紙張厚度
-
使用while迴圈來控製紙張摺疊,迴圈條件是(紙張厚度<山峰高度),迴圈每執行一次,就表示紙張摺疊一次,並把紙張厚度變為原來兩倍。
-
迴圈外定義計數變數count,迴圈每摺疊一次紙張,讓count變數+1;
-
完整代碼
package com.itheima.d_while;
/**
* @author: LXHYouth
* @date: 2024/3/3 11:39
* @description:
*/
/*
案例需求: 珠峰摺紙
已知珠峰的高度是8848860毫米,紙張的厚度是0.1毫米
問紙張對折幾次, 厚度能夠達到/超過珠峰高度
*/
public class Demo02 {
public static void main(String[] args) {
double peakHeight=8848860;
double paperThicness = 0.1;
int count=0;
//使用while迴圈編寫
// while(paperThicness<=peakHeight){
// paperThicness *=2;
// count++;
// }
//使用for迴圈編寫
//這裡不可以直接使用i當作計數器, i的作用域只在for迴圈中, 出了作用域使用會報錯, 就一定得用count來計數.
for(int i=0;i>=0;i++){
if(paperThicness<=peakHeight){
paperThicness *=2;
count++;
}else{
break;
}
}
System.out.println("張對折"+count+"次, 厚度能夠達到/超過珠峰高度");
System.out.println("最終紙張高度是: " + paperThicness);
}
//答案:
//張對折27次, 厚度能夠達到/超過珠峰高度
//最終紙張高度是: 1.34217728E7
}
//思考一下, while和for都可以實現迴圈,那麼使用的時候怎麼選擇呢?
3.2.5 do-while迴圈
-
do-while迴圈
初始化語句; do { 迴圈體語句; 條件變更語句; } while (條件判斷語句);
int i = 0; do { System.out.println(“Hello World!"); i++; } while( i < 3);
-
do-while迴圈應用場景示例
- 入門案例:
package com.itheima.e_do_while;
/**
* @author: LXHYouth
* @date: 2024/3/3 11:39
* @description:
/*
迴圈結構: do-while迴圈
格式:
初始化語句;
do {
迴圈體語句;
條件變更語句;
} while (條件判斷語句);
執行過程:
1. 執行一次初始化語句
2. 執行一次迴圈體語句
3. 執行一次條件變更語句
4. 執行條件判斷語句
如果不成立, 迴圈結束
如果成立, 重覆執行2、3步驟
特點:
先執行1次迴圈體,再進行判斷
也就是說: 無論迴圈條件是否成立,都會至少執行1次迴圈體
*/
public class Demo01 {
public static void main(String[] args) {
//需求1: 使用do-while迴圈列印5次HelloWorld
int i=0;
do{
System.out.println("HelloWorld");
i++;
}while(i<5);
//需求2: 說出上面程式的執行順序
// 1. 執行一次初始化語句
// 2. 執行一次迴圈體語句
// 3. 執行一次條件變更語句
// 4. 執行條件判斷語句
// 如果不成立, 迴圈結束
// 如果成立, 重覆執行2、3步驟
}
}
3.2.6 三種迴圈的對比
- 三種迴圈的區別小結
- for迴圈 和 while迴圈(先判斷後執行); do...while (先執行後判斷)
- for迴圈和while迴圈的執行流程是一模一樣的,功能上無區別,for能做的while也能做,反之亦然。
- 使用規範:如果已知迴圈次數建議使用for迴圈,如果不清楚要迴圈多少次建議使用while迴圈。
- 其他區別:for迴圈中,控制迴圈的變數只在迴圈中使用。while迴圈中,控制迴圈的變數在迴圈後還可以繼續使用。
for (int i = 0; i < 3; i++ ) {
System.out.println(“Hello World");
}
System.out.println(i);
int i = 0;
while (i < 3) {
System.out.println("Hello World");
i++;
}
System.out.println(i);
3.2.7 死迴圈
-
死迴圈
- 可以一直執行下去的一種迴圈,如果沒有干預不會停下來。
-
死迴圈的寫法
for( ; ; ){
System.out.println("HelloWorld");
}
//經典寫法
while(true){
System.out.println("HelloWorld");
}
do{
System.out.printin("HelloWorld");
}while(true);
- 死迴圈案例
package com.itheima.f_dead;
/**
* @author: LXHYouth
* @date: 2024/3/3 11:39
* @description:
/*
死迴圈:可以一直執行下去的一種迴圈,如果沒有干預不會停下來。
本質上就是讓判斷條件一直成立
*/
public class Demo01 {
public static void main(String[] args) {
//需求1: for實現死迴圈
// for( ; ; ){
// System.out.println("HelloWorld!!!");
// }
//需求2: while實現死迴圈
// while(true){
// System.out.println("HelloWorld2!!!");
// }
//需求3: do-while實現死迴圈
do {
System.out.println("HelloWorld3!!!");
} while (true);
}
}
3.2.8 迴圈嵌套
-
迴圈嵌套
- 迴圈中又包含迴圈。
for(int i = 0; i < 3; i++) { //一共說3天 for(int j = 0; j < 5; j++) { System.out.println("我愛你");//每天說5遍 }
-
迴圈嵌套的特點
- 外部迴圈每迴圈一次,內部迴圈會全部執行完一輪。
-
迴圈嵌套案例
package com.itheima.g_nest;
/**
* @author: LXHYouth
* @date: 2024/3/3 11:39
* @description:
*/
/*
嵌套迴圈:
迴圈中又包含迴圈的寫法
特點:
外層迴圈執行1次, 記憶體迴圈執行1輪
*/
public class Demo01 {
public static void main(String[] args) {
//需求1: 連續說3天, 每天說5遍"我愛你"
// for(int i=0;i<15;i++){
// System.out.println("我愛你");
// }
//需求2: 連續說3天, 每天說5遍"我愛你"; 列印結果如下
//第1天第1遍:我愛你
//第1天第2遍:我愛你
//...
//第3天第5遍:我愛你
for (int i = 1; i < 4; i++) {
for (int j = 1; j < 6; j++) {
System.out.println("第"+i+"天第"+j+"遍:我愛你");
}
}
System.out.println("-------分割線--------");
//需求3: 在控制台列印4行5列的矩形
for(int i=0;i<4;i++){
for (int j = 0; j < 5; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
3.3 跳轉關鍵字: break、continue
3.3.1 跳轉關鍵字: break、continue 詳情
- 跳轉關鍵字
- break: 跳出並結束當前所在迴圈的執行。
- continue: 用於跳出當前迴圈的當次執行,直接進入迴圈的下一次執行。
- 註意事項:
- break : 只能用於結束所在迴圈, 或者結束所在switch分支的執行。
- continue : 只能在迴圈中進行使用。
- break、continue入門案例
package com.itheima.h_break_continue;
/**
* @author: LXHYouth
* @date: 2024/3/3 11:39
* @description:
/*
跳轉關鍵字
break: 用於迴圈和switch,作用是結束
continue: 僅用於迴圈, 作用是跳過本次, 繼續下次
*/
public class Demo01 {
public static void main(String[] args) {
int i=1;
while(true){
if(i<10){
break;
}
i++;
}
System.out.println("while迴圈以退出");
for(int j=0;j<5;j++){
if(j==4){
System.out.println("當j="+j+" ,本次迴圈跳過.");
}
}
}
}
3.3.2 案例: 密碼驗證
-
需求:
- 系統密碼是520,請用戶不斷的從鍵盤輸入密碼進行驗證
- 驗證不對輸出:密碼錯誤, 然後繼續讓用戶輸入
- 驗證成功輸出:歡迎進入系統, 並停止程式。
-
分析:
- 定義一個鍵盤對象
- 定義一個整型變數記錄從鍵盤上接到的密碼
- 使用while死迴圈,讓用戶不斷輸入數據,與正確密碼比對
- 驗證不成功輸出:密碼錯誤
- 驗證成功輸出:歡迎進入系統,並使用break結束當前迴圈的執行。
package com.itheima.h_break_continue;
import java.util.Scanner;
/**
* @author: LXHYouth
* @date: 2024/3/3 11:39
* @description:
*
/*
/*
* 跳轉關鍵字
* break: 用於迴圈和switch,作用是結束
* continue: 僅用於迴圈, 作用是跳過本次, 繼續下次
*/
public class Demo02 {
public static void main(String[] args) {
//需求: 用戶密碼校驗
// 系統密碼是520,請用戶不斷的從鍵盤輸入密碼進行驗證
// 驗證不對輸出:密碼錯誤, 然後繼續讓用戶輸入
int passWord = 520, inputPassWord = 0;
Scanner sc = new Scanner(System.in);
while (true) {
System.out.print("請輸入密碼: ");
inputPassWord = sc.nextInt();
if (passWord == inputPassWord) {
break;
} else {
System.out.print("密碼錯誤, ");
}
}
System.out.println("密碼正確, 系統登陸成功!!!");
}
}
3.4 Random類: 生成隨機數
3.4.1 Random類 詳情
- 應用場景
- 隨機點名
- 年會抽獎
- Random類
- 作用:生成隨機數。
- 得到0-9的隨機數的實現步驟:
- 導包:告訴程式去JDK的哪個包中找Random
- 寫一行代碼拿到隨機數對象
- 調用隨機數的功能獲取0-9之間的隨機數
- 註意:
- nextInt(n) 功能只能生成: 0 至 n-1之間的隨機數,不包含n。
- 小練習:
package com.itheima.i_random;
import java.util.Random;
/**
* @author: LXHYouth
* @date: 2024/3/3 11:39
* @description:
*
/*
/*
Random:生成隨機數
使用步驟
1. 導包(IDEA會自動完成)
2. 創建Random對象 Random r = new Random()
3. 調用方法,獲取結果 r.nextInt(n)
此方法可以獲取[0,n-1]之間的隨機整數, 註意: 沒有n
*/
public class Demo01 {
public static void main(String[] args) {
//創建隨機數對象
Random r = new Random();
//需求1: 獲取一個[0,9]的隨機整數
int number = r.nextInt();
System.out.println("隨機生成[0,9]的隨機整數為: "+ number);
//需求2: 隨機生成[1,10]之間的隨機數,程式怎麼實現?
number=r.nextInt(10)+1;
System.out.println("隨機生成[1,10]之間的隨機數為: "+ number);
//需求3: 隨機生成[33,55]之間的隨機數,程式怎麼實現?
number= r.nextInt(23)+33;
System.out.println("隨機生成[33,55]之間的隨機數為: "+ number);
//規律: (大數-小數+1)+小數
}
}
3.4.2 案例: 猜數字游戲
-
需求:
- 隨機生成一個1-100之間的數據,提示用戶猜測,猜大提示過大,猜小提示過小,直到猜中結束游戲。
-
分析:
- 先隨機生成一個1-100之間的數據。
- 定義一個死迴圈讓用戶可以一直猜測。
- 在死迴圈里,每次都提示用戶輸入一個猜測的數字,猜大提示過大,猜小提示過小,猜中則結束游戲。
-
詳細代碼:
package com.itheima.i_random;
import java.util.Random;
import java.util.Scanner;
/**
* @author: LXHYouth
* @date: 2024/3/3 11:39
* @description:
*
/*
/*
案例:猜數字
隨機生成一個1-100之間的數據,提示用戶去猜測,
用戶從鍵盤輸入猜測的數
程式判斷: 猜大提示過大,猜小提示過小,直到猜中結束游戲。
*/
public class Demo02 {
public static void main(String[] args) {
//思路:
//1. 創建Random對象
Random random = new Random();
//2. 創建鍵盤對象
Scanner scanner = new Scanner(System.in);
//3. 生成隨機數
int number = random.nextInt(100) + 1;
//4. 提示用戶, 輸入猜數字
System.out.print("請輸入猜測的數字: ");
//5. 使用while死迴圈, 實現輸入錯誤進行重新輸入
while (true) {
int inputNumber = scanner.nextInt();
if (inputNumber > number) {
System.out.println("輸入的數字大了, 請重新輸入: ");
} else if (inputNumber < number) {
System.out.println("輸入的數字小了, 請重新輸入: ");
} else {
//6. 如果猜對, 使用答對了, 使用break終止迴圈.
System.out.println("恭喜你猜對了");
break;
}
}
System.out.println("游戲到此結束, 謝謝參與!!!");
}
}
3.4.3 總結
-
Random生成隨機數需要幾步?
- 導包:import java.util.Random;
- Random r = new Random();
- int number = r.nextInt(10);
-
如何生成 小數 – 大數 之間的隨機數?
- int number = r.nextInt(大數-小數+1) + 小數;