四、switch分支和循环结构

1.switch case

1.1概述

switch (/* 变量 */) {
    case 常量选择1:
        // 处理方式1;
        break;
    case 常量选择2:
        // 处理方式2;
        break;
    case 常量选择3:
        // 处理方式3;
        break;
    default:
        // 最终处理方式;
        break;
}
/*
执行流程:
	代码运行到switch case结构
	首先取出switch之后小括号中变量保存的数据
	匹配switch 大括号以内的case选择,找到对应的常量选择匹配。
		如果找到了对应的匹配选择,执行对应的处理方式。
		如果没有找到匹配选择,执行default里面的处理方式。
	这里【break】关键字用于结束switch case运行
*/

1.2代码演示

import java.util.Scanner;

/*
switch case 演示点菜
	1. 五顺斋烤鸭
	2. 重庆/四川火锅
	3. 擀面皮
	4. 烤羊排
	5. 佛跳墙(God Use VPN)
*/
public class TestSwitchCase {
    public static void main(String[] args) {
        int choose = 0;
        System.out.println("请输入菜品对应编号点菜\n1. 五顺斋烤鸭\n2. 重庆/四川火锅\n3. 擀面皮\n4. 烤羊排\n5. 佛跳墙(God Use VPN)");
        System.out.println("开始你的表演:");
        Scanner input = new Scanner(System.in);
        choose = input.nextInt();
        switch(choose){
            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;
            default:
                System.out.println("你瞎选啥?");
                break;

        }
    }
}

1.3注意:

1. 在switch - case结构中,有且只能执行case,或者default之后的语句。如果存在在case 和default之外的语句,是无法执行的,对于Java而言是无效代码。
	unreachable code

2. 在switch - case结构中,如果存在case或者default选择缺少break操作。代码会继续运行到下一个break,或者大括号 }(switch case结尾大括号) 终止switch - case!!

3. 在switch - case结构中,不允许出现相同的case选项,代码无法进行操作选择,因为所有case选择是平级的

4. 在switch - case结构中,default可以省略,代码编译不会受到影响,没有语法错误。但是失去switch case自带的一种异常情况处理方式。
	AJCG阿里巴巴Java开发规范中,是不推荐省略default

1.4概述

1. switch case结构和if else if 结构类似,两者是可以互通
2. if else if结构中可以处理范围性数据,处理的数据区间更加广泛
3. switch case处理数据明确性更强,处理针对性选择比较合适

2.while循环结构

2.1while循环

while (/* 循环条件 true or false */) {
    // 循环体
    // (循环条件变更)
}
/*
执行流程:
	当前程序运行到while循环结构时,首先判断while之后的小括号里面的循环条件是否为true,如果为true,执行循环体,在回到循环条件判断,直到循环条件为false,终止循环!!!
*/

2.2代码演示

/*
while 循环结构
	展示数值 1 ~ 100 所有数值的和
*/
public class TestWhileLoop {
    public static void main(String[] args) {
        int sum = 0;
        int num =1;
        while(num <= 100){
            sum += num;
            num++;
        }
        System.out.println(sum);
    }
}

2.3do while循环

do {
    // 循环体
    // (循环条件变更)
} while (/* 循环条件判断 */);
/*
执行流程:
	当程序执行到do - while循环结构时,首先执行一次循环体(循环条件变更),再来判断while中循环条件判断是否为true,如果为true,继续执行,如果为false,终止循环。
【注意】
	1. while(condition);;;;;;;;;;;;;;;;;;;;;;;;;;; 这里英文分号
	2. 执行do - while需要明确第一次循环会不会存在隐患
*/

2.4代码演示

/*
使用do - while循环,展示1 ~ 100 所有的偶数
*/
public class TestDoWhile {
    public static void main(String[] args) {
//        int i = 1;
//        do{
//            if(i % 2 == 0){
//                System.out.println(i);
//            }
//            i++;
//        }while(i <= 100);

        int j = 2;
        do{
            System.out.println(j);
            j += 2;
        }while(j <= 100);
    }
}
*
使用do - while循环
	完成 1 ~ 150的和
*/
public class TestDoWhile2 {
    public static void main(String[] args) {
        int sum = 0;
        int i = 1;
        do{
            sum += i;
            i++;
        }while(i <= 150);
        System.out.println(sum);
    }
}       
/*
使用do - while循环
	展示大写字母A ~ Z
*/
public class TestDoWhile3 {
    public static void main(String[] args) {
        char ch = 'A';
        do{
            System.out.println(ch);
            ch++;
        }while(ch <= 'Z');

    }
}

2.5while循环和switch嵌套

import java.util.Scanner;

/*
使用while循环,完成一个点菜系统
	1. 完成用户的点菜功能
	2. 点菜之后输出总价
	3. 用户指定方式退出
*/
public class TestNest {
    public static void main(String[] args) {
        int choose = 0;
        int total = 0;
        System.out.println("菜单:\n1. 青岛啤酒 8RMB\n2. 野格 88RMB\n3. 江小白 25RMB\n4. 乌苏 6RMB\n6. 买单\n");
        System.out.println("请按编号开始点菜:");
        Scanner input = new Scanner(System.in);
        while(choose != 6){
            choose = input.nextInt();
            switch (choose){
                case 1:
                    System.out.println("青岛啤酒 8RMB");
                    total += 8;
                    break;
                case 2:
                    System.out.println("野格 88RMB");
                    total += 88;
                    break;
                case 3:
                    System.out.println("江小白 25RMB");
                    total += 25;
                    break;
                case 4:
                    System.out.println("乌苏 6RMB");
                    total += 6;
                    break;
                case 6:
                    System.out.println("买单!");
                    break;
                default:
                    System.out.println("别瞎选,看菜单");
                    break;
            }
        }
        System.out.println("总共消费:" + total);
    }
}

2.6do while循环和switch嵌套

do{}while();替换while()即可

2.7小结

1. 循环过程中最核心的内容就是循环变量,需要对于循环变量的执行的过程中数值变量完全掌握!!!如果无法明确循环的次数,循环变量的值,循环的过程,可以将循环代码中变量的变更过程记录。

2. 循环过程中需要注意无限循环问题,控制无限循环问题的出现。一定要保证循环条件有效性或者代码中存在一个跳出循环的机制。

3. do while循环中,第一次循环体的执行是没有经过任何的条件判断的,需要注意!
【已知,可控】

4. while和do while循环结构是可以进行互换的。

5. 然后在while和do while之间考虑使用的情况下,一般推荐使用while循环。但是不代表do while没有实际的使用效果。

3.for循环

for (/* 循环条件初始化 */; /* 循环条件判断 */;  /* 循环条件变更 */) {
    // 循环体
}

for循环的优势:
	1. for之后的小括号内容,可读性更强
	2. 可以通过for之后小括号,里面的内容大概推算出整个循环会执行多少次
	3. for循环和一些特殊的数据关系非常紧密
/*
使用for循环,展示所有大写英文字母
*/
class Demo {
	public static void main(String[] args) {
		/*
		ch += 1 <==> ch++ <==> ++ch
		*/
		for (char ch = 'A'; ch <= 'Z'; ch += 1) {
			System.out.println(ch);
		}
	}
}

4.break

字面含义:
	跳出,打破
	代码中的功能是跳出循环结构或者switch case结构
	
break关键字可以在循环过程中,当前循环结果出现了预期的内容,终止循环。

/*
嵌套循环情况下。break关键字的使用
*/
class Demo {
	public static void main(String[] args) {
		for (int i = 0; i < 10; i++) {
		
			System.out.println("i : " + i); 
			
			for (int j = 0; j < 10; j++) {
				System.out.print("j : " + j + " ");
				if (5 == j) {
					// break关键字有且只能跳出当前所在大括号对应循环
					break;
				}	
			}
			
			System.out.println();
		}
	}
}

5.continue

continue关键字
	结束当前循环,进入下一次循环
	
class Demo {
	public static void main(String[] args) {
		int i = 0;
		
		/*
		continue关键字和while循环以及do while一起使用,还要操心
		循环变量修改问题在continue之前,还是之后
		*/
		while (i < 10) {
			System.out.println(i);
			i += 1;
			if (5 == i) {
				System.out.println("Continue执行");
				continue;
			}		
		}
		
		int j = 0;
		
		do {	
			j += 1;
			
			if (5 == j) {
				System.out.println("你来咬我呀~~~");
				continue;
			}
			
			System.out.println("锤石 锤石你~~~~");
		} while (j < 10);
	}
}
class Demo {
	public static void main(String[] args) {
		
		/*
		for循环使用continue关键字不会受到影响
		不会跳过循环条件变更
		*/
		for (int i = 1; i <= 10; i++) {
			if (5 == i) {
				System.out.println("continue执行了,嘿嘿嘿");
				continue;
			}
			
			System.out.println("实力不允许for循环低调");
		}
	}
}
posted @ 2020-04-17 22:28  jacob_code  阅读(216)  评论(0)    收藏  举报