【Java基础笔记】程序流程控制

前言

程序流程控制

1.顺序结构

  • 程序默认流程

2.分支结构

2.1 if 条件语句

  • 根据判定的结果(真或假)决定执行某个分支的代码
	if(条件表达式1){
		语句体1;
	} else if(条件表达式2){
		语句体2;
	} else {
		语句体n+1
	}

2.2 switch 多重选择

  • 匹配条件执行分支
	switch(表达式){
		case1:
			执行代码;
			break;
		case 值n:
			执行代码;
			break;
		default:
			执行代码;
	}
  • 执行流程:
    ①限制性表达式的值,使用表达式中的值与case后的值匹配
    ②匹配case值为true,执行后面的代码,遇到break跳出switch分支
    ③未匹配到case,执行default代码
  • switch分支注意事项:
    • 表达式类型只能是byte、short、int、char,JDK5开始支持枚举,JDK7开始支持String不支持double、float、long
    • case的值不允许重复只能是字面量不能是变量
    • 不要忘记break,否则会出现穿透现象
  • switch的穿透性:
    • 代码执行到没有break的case块,执行完将直接进入下一个case块(不再那行任何匹配),直到遇到break才跳出分支

【switch案例】月份查看器——switch的穿透性

public class SwitchDemo {
    public static void main(String[] args) {
        int month = 2;
        switch (month){
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12: // 穿透性,直接执行case12中的代码
                System.out.println(month + "月是31天!");
                break;
            case 2:
                System.out.println(month + "月,闰年是29天,非闰年是28天!");
                break;
            case 4:
            case 6:
            case 9:
            case 11: // 穿透性,直接执行case11中的代码
                System.out.println(month + "月是30天!");
                break;
            default:
                System.out.println("数据有误!");
        }
    }
}
2月,闰年是29天,非闰年是28天!

2.3 if与switch分支各自适合的业务场景

  • if: 功能强大于switch,适合做区间匹配
  • switch: 适合做值匹配的分支选择、代码优雅

3.循环结构

3.1 for 循环

  • 控制一段代码反复多次执行
	for(初始化语句; 循环条件; 迭代语句) {
		循环体语句(重复执行的代码);
	}
  • IDEA生成for循环快捷键
	// fori 直接生成以变量i为迭代的循环语句
	for (int i = 0; i < ; i++) {}

【for循环案例1】1-5之间的数据求和

public class ForDemo1 {
    public static void main(String[] args) {
        // 整型变量sum用于累加求和
        int sum = 0;
        // for循环找到 1 2 3 4 5
        for (int i = 1; i <= 5; i++) {
            // 将数据累加给sum
            sum += i;
        }
        System.out.println("1-5的和是:" + sum);
    }
}
1-5的和是:15

【for循环案例2】求1-10之间的奇数和

  • 方法一: 取1-10的数筛选出奇数并求和
public class ForDemo2 {
    public static void main(String[] args) {
        // 整型变量sum用于累加求和
        int sum = 0;
        // for循环找到 1-10的数据
        for (int i = 1; i <= 10; i++) {
            // 筛选出奇数
            if (i % 2 == 1) {
                // 将筛选出的数据累加到sum
                sum += i;
            }
        }
        System.out.println("1-10的奇数和是:" + sum);
    }
}
1-10的奇数和是:25
  • 方法二: 取1-10中的奇数并求和
		// 整型变量sum1用于累加求和
        int sum1 = 0;
        // for循环通过控制迭代语句,找到 1-10的奇数
        for (int i = 1; i <= 10; i += 2) {
            // 将数据累加到sum1
            sum1 += i;
        }
        System.out.println("1-10的奇数和是:" + sum1);

【for循环案例3】水仙花数

  • 水仙花数: 是一个三位数,满足个位、十位、百位数字的立方和等于原数
public class ForDemo3 {
    public static void main(String[] args) {
        // 整型count为计数器
        int count = 0;
        // for循环获取全部三位数
        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"); // 必须为双引号的\t
                count++;
            }
        }
        System.out.println("\n水仙花的个数是:" + count);
    }
}
153	370	371	407	
水仙花的个数是:4

3.2 for each 循环

  • for each 循环语句的循环变量将会遍历数组中的每个元素(其他类型的元素集合亦可),不需要使用下标值
	for (variable : collection) { statement }
  • collection这一集合表达式必须是一个数组或一个实现了Iterable接口的类对象(例如ArrayList)

3.2 while 循环

	初始化语句;
	while (循环条件) {
		循环体语句(被重复执行的代码);
		迭代语句;
	}

3.3 for与while循环使用规范

* 知道循环次数:for
* 不知道循环次数:while

【while循环案例】珠穆朗玛峰

  • 珠穆朗玛峰高度8848.86米=8848860毫米,使用一张厚度为0.1毫米的纸,计算需折叠多少次,可以达到珠穆朗玛峰的高度(不知道循环次数,可以选择使用while循环实现)
public class WhileDemo {
    public static void main(String[] args) {
        // double型珠穆朗玛峰高度
        final double PEAK_HEIGHT = 8848860;
        // double型纸张初始高度
        double paperThickness = 0.1;
        // int型计数器
        int count = 0;
        while (paperThickness < PEAK_HEIGHT) {
            // 折叠后纸张厚度
            paperThickness *= 2;
            count++;
        }
        System.out.println("折叠次数:" + count);
        System.out.println("纸张的最终厚度:" + paperThickness);
    }
}
折叠次数:27
纸张的最终厚度:1.34217728E7

3.4 do-while 循环

  • 先执行再判断循环条件,一定会先执行一次循环体
	初始化语句;
	do {
		循环体语句;
		迭代语句;
	} while (循环条件);

3.5 死循环

  • for死循环
	for(;;) {}
  • while死循环(常用)
	while (true) {}
  • do-while死循环
	do {} while (true);

【死循环案例】密码验证

import java.util.Scanner;

public class DeadWhileDemo {
    public static void main(String[] args) {
        // 正确密码
        final String PASSWORD = "abc";
        Scanner sc = new Scanner(System.in);
        while(true){
            System.out.println("请输入密码:");
            String password = sc.next();
            // 比较输入密码是否正确
            if (password.equals(PASSWORD)) {
                System.out.println("登录成功!");
                break;
            } else {
                System.out.println("密码错误!");
            }
        }
    }
}
请输入密码:
aaa
密码错误!
请输入密码:
abc
登录成功!

4.跳转控制语句

跳转控制语句作用说明
break跳出并结束当前所在循环只能用于结束循环或switch分支的执行
continue跳出当前循环的当次执行,进入下一次循环只能用于循环语句
带标签的break用于跳出多充嵌套的循环标签必须放在希望跳出的最外层循环之前,并且紧跟一个冒号
	goto_loop:
	while(..) {
		for(...) {
			if(..) {
				break goto_loop; // 直接跳出while循环
			}
		}
	}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值