day03-流程控制
流程控制语句:Java提供了一些流程控制语句,来控制程序的执行流程
提供了三种控制形式
顺序结构:程序默认
分支结构:if、switch
循环结构:for、while、do while
java-分支结构
if语句
Switch语句
Switch的穿透性
java-分支结构-if语句
根据判定的结果(真或假)决定执行某个分支的代码
if分支有三种格式:
格式1:
int hearBeat= 90;
if (hearBeat < 60 || hearBeat > 100){
System.out.println("您的心跳数据是:" + hearBeat + "您可能需要进一步检查");
}
格式2:
double money = 1313;
if (money >= 1314){
System.out.println("您当前发送红包成功");
}else {
System.out.println("发送失败");
}
格式3:
int score = 90;
if (score >= 0 && score < 60){
System.out.println("C");
}else if (score >= 60 && score < 80){
System.out.println("B");
}else if (score >= 80 && score < 90){
System.out.println("A");
}else if (score >= 90 && score <= 100){
System.out.println("A+");
}else {
System.out.println("您录入的分数有误");
}
java-分支结构-Switch语句
也是匹配条件执行分支,适合做值匹配的分支选择,结构清晰,格式良好
执行流程:
-
先执行表达式的值,拿这个值去与case后的值进行匹配
-
匹配哪个case的值为true就执行哪个case,遇到break就跳出Switch分支
-
如果case后的值都不匹配则执行default代码
String weekday = "周日";
switch (weekday){
case "周一":
System.out.println("苦逼的第一天上班");
break;
case "周二":
System.out.println("苦逼的第二天上班");
break;
case "周三":
System.out.println("苦逼的第三天上班");
break;
case "周四":
System.out.println("苦逼的第四天上班");
break;
case "周五":
System.out.println("苦逼的第五天上班");
break;
case "周六":
System.out.println("第一天休息");
break;
case "周日":
System.out.println("第二天休息");
break;
default:
System.out.println("数据有误");
if、switch分支各自适合做什么场景:
- if其实在功能上远远强大于switch
- if适合做区间匹配。
- switch适合做:值匹配的分支选择、代码优雅。
switch分支注意事项:
- 表达式类型只能是byte、short、int、char,JDK5开始支持枚举,JDK7开始支持String、不支持double、float、long。
- case给出的值不允许重复,且只能是字面量,不能是变量。
- 不要忘记写break,否则会出现穿透现象
switch穿透性
如果代码执行到没有写break的case块,执行完后将直接进入下一个case块执行代码(而且不会进行任何匹配),直到遇到break才跳出分支,这就是switch的穿透性。
存在多个case分支的功能代码一样时,可以用穿透性把流程集中到同一处处理,这样可以简化代码
java-循环结构
- for循环
- while循环
- do-while循环
- 死循环
- 循环嵌套
java-循环结构-for循环
控制一段代码反复执行很多次
for ( int i = 0 ; i < 3 ; i ++ ){
System.out.println("Hello World");
}
执行的流程:
- 循环一开始,执行int i = 0 一次4
- 然后判断循环条件:0 < 3 返回true ,进入到循环体中执行输出 :helloWorld ,然后执行迭代语句i++ , 此时i=1了。
- 然后判断循环条件:1 < 3 返回true ,进入到循环体中执行输出 :helloWorld ,然后执行迭代语句i++ , 此时i=2了。
- 然后判断循环条件:2 < 3 返回true ,进入到循环体中执行输出 :helloWorld, 然后执行迭代语句i++ , 此时i=3了。
- 然后判断循环条件:3 < 3 返回false, 循环立即结束!!
for循环案例1:// 需求:计算1-5的和
int sum = 0;
for (int i = 1; i <= 5; i++) {
sum += i;
等价于:sum = sum + i
i == 1 sum = 0 + 1
i == 2 sum = 1 + 2
i == 3 sum = 3 + 3
i == 4 sum = 6 + 4
i == 5 sum = 10 +5
}
System.out.println(sum); // 15
for循环案例2:求1-10之间的奇数和,并把求和结果在控制台输出。
方式1:
int sum = 0;
for (int i = 1; i <=10 ; i++) {
if (i % 2 == 1){
sum += i;
}
}
System.out.println(sum);
方式2:
int sum1 = 0;
for (int i = 1; i <=10 ; i+=2) {
sum1 += i;
}
System.out.println(sum);
for循环案例3:在控制台输出所有的“水仙花数”,水仙花数必须满足如下2个要求:
- 水仙花数是一个三位数
- 水仙花数的个位、十位、百位的数字立方和等于原数
- 在计算水仙花个数
int count = 0;
for (int i = 100; i <=999 ; i++) {
int ge = i % 10;
int shi = i / 10 % 10;
int bai = i / 100;
if ((ge*ge*ge + shi*shi*shi + bai*bai*bai) == i){
System.out.print(i+ "\t");
count ++;
}
}
System.out.println();
System.out.println("水仙花个数是:" + count);
java-循环结构-while循环
什么时候用for循环,什么时候用while循环?
- 功能上是完全一样的,for能解决的while也能解决,反之亦然
- 使用规范是:知道循环几次:使用for;不知道循环几次建议使用:while。
int i = 0;
while (i<3){
System.out.println("hello world");
i++;
}
while循环案例:
public static void main(String[] args) {
double peakHeight = 8848860;
double paperThickness = 0.1;
int count = 0;
while (paperThickness < peakHeight){
paperThickness *= 2;
count ++;
}
System.out.println("折叠的次数:" + count); // 折叠的次数:27
System.out.println("纸张的最终厚度:" + paperThickness); // 纸张的最终厚度:1.34217728E7
}
for和while使用总结:
- 其实whie能做的for都能实现
- 但是如果一开始不知道循环次数的情况下,建议使用while循环解决更专业。
java-循环结构-do-while循环
do-while循环的特点:一定会先执行一次循环体
int i = 0;
do {
System.out.println("Hello world");
i++;
}while (i < 3);
三种循环的区别:
- for循环 和 while循环(先判断后执行)
- do…while (第一次先执行后判断)
for和while的区别:
- for循环和while循环的执行流程是一模一样的
- 如果已知循环次数建议使用for循环,如果不清楚要循环多少次建议使用while循环。
- for循环中,控制循环的变量只在循环中可以使用。While循环中,控制循环的变量在循环后还可以继续使用。
java-循环结构-死循环
一直循环的执行下去,如果没有干预不会停止下来
for循环:
for (;;){
System.out.println("Hello World");
}
while循环:
while (true){
System.out.println("我是快乐的死循环");
}
do-while循环
do {
System.out.println("我是快乐的死循环");
}while (true);
死循环案例:系统密码是100,请用户不断的输入密码验证,验证不对输出密码错误,验证成功输出欢迎进入系统,并停止程序
int okPassword = 100;
// 2. 定义一个死循环让用户不断地输入密码认证
Scanner sc = new Scanner(System.in);
while (true){
System.out.println("请您输入正确的密码");
int password = sc.nextInt();
// 3. 使用if判断密码是否正确
if (password == okPassword){
System.out.println("登录成功了");
break; // 可以立即结束打过去所在循环的结构
}else {
System.out.println("密码错误!");
}
}
java-循环结构-循环嵌套
循环中有包含循环
嵌套循环的特点:
- 外部循环每循环一次,内部循环全部执行完一次
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 3 ; j++) {
System.out.println("我爱你");
}
System.out.println("----------------------");
}
循环嵌套案例:在控制台使用 * 打印出4行5列的矩形
for (int i = 0; i < 4; i++) {
for (int j = 1; j < 5; j++) {
System.out.print("*");
}
System.out.println(); // 换行
}
java-跳转关键字-break、continue
break:跳出并结束当前所在循环的执行。
break注意事项:只能用于结束所在循环,或者结束所在switch分支的执行
for (int i = 0; i < 5; i++) {
System.out.println("快乐的洗碗");
if (i == 2){
break; // 跳出并结束当前循环的执行
}
}
continue:用于跳出当前循环的当次执行,进入下次循环。
continue注意事项:只能在循环中进行使用
for (int i = 1; i <= 5; i++) {
if (i == 3){
continue; // 立即跳出当前执行,进入循环的下一次
}
System.out.println("洗碗:" + i);
}
java-案例技术-随机数Random类
Random随机数技术:用于在程序中获取随机数的技术。
使用步骤:
导包:告诉程序去JDK的哪个包中找随机数技术
import java.util.Random;
写一行代码代表得到随机数对象
Random r = new Random();
调用随机数的功能获取0-9的随机数
int data = r.nextInt(10);
Random生成随机数的特点:
nextInt(n)功能只能生成:0 – (n-1)之间的随机数
案例:猜数字游戏
需求:随机生成一个1-100之间的数据,提示用户猜测,猜大提示过大,猜小提示过小,直到猜中结束游戏
Random r = new Random();
int luckNumber = r.nextInt(100)+1;
Scanner sc = new Scanner(System.in);
while (true){
System.out.println("请您输入猜测的数据(1-100)");
int guessNumber = sc.nextInt();
if (guessNumber > luckNumber){
System.out.println("猜错的数据过大");
}else if (guessNumber < luckNumber){
System.out.println("猜错的数据过小");
}else {
System.out.println("恭喜您猜中了");
break;
}
}