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) + 小数;