分支语句(四)

186 阅读3分钟

条件判断if...else...

(1)单分支结构 (2)双分支结构 (3)多分支结构

语句结构:
if(条件表达式1){
	当条件表达式1成立时,要执行的语句块1;
}else if(条件表达式2){
	当条件表达式2成立时,要执行的语句块2;
}else if(条件表达式3){
	当条件表达式3成立时,要执行的语句块3;
}....
else{//可选,可写可不写
	当所有的条件表达式都不成立时,要执行的语句块n+1;
}

执行特点:

(1)按顺序从上往下判断,如果有一个条件满足了,就执行对应的语句块, 剩下的条件就不看了。如果所有条件都不满足,就执行最后的else中的语句块。

(2)所有if()中的条件表达式都必须是boolean值或者是结果是boolean类型的表达式

(3)所有的if后面{}和else后面{}中如果只有一个语句,可以省略{}

(4)多分支结构中,多个if条件的顺序是否可以调整,要看这几个条件的范围是

​ A:互斥关系,可以调整

​ B:包含关系,不可以调整,范围小的在上面,范围大的在下面

多分支结构中,多个if条件的顺序是否可以调整,要看这几个条件的范围是

(1)互斥关系,可以调整

(2)包含关系,不可以调整,范围小的在上面,范围大的在下面

选择结构:switch...case

语法结构:
switch(表达式){
	case 常量值1:
		语句块1;
		【break;】
	case 常量值2:
		语句块2;
	case 常量值3:
		语句块3;
	...
	default://该部分是可选的,可以写也可以不写
		语句块n+1;
		break;
}

说明: (1)break不是必选的

(2)default也不是必选的,并且位置不一定在最后,只是习惯上在最后。 无论它在哪里,都是所有case不满足时,才从default进入。

(3)case后面一定是常量值

(4)case后面的常量不能重复

(5)switch(表达式)中表达式的结果类型只能是 byte,short,int,char四种基本数据类型和 String与枚举两种引用数据类型。

执行过程:

(1)入口

A:当switch(表达式)中表达式的值与某个case后面的常量值一样了,就从这个case进入

B:默认入口,当所有的case都不满足,从default进入

(2)出口

A:当遇到switch结构的结束},自然就结束了

B:中断出口,break 或 return等

(3)贯穿

从入口到出口之间,会贯穿其他的case,一直往下执行,直到出口为止

package com.dyy.exam;

import java.util.Scanner;
/*1990年开始三天打鱼两天筛网,那么某年某月某日是在打鱼还是晒网*/
public class Exam9 {
    public static void main(String[] args) {
        int[] Pyear = new int[12];
        for (int i = 0; i < 12; i++) {
            switch (i + 1) {
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    Pyear[i] = 31;
                    break;
                case 2:
                    Pyear[i] = 28;
                    break;
                case 4:
                case 6:
                case 11:
                    Pyear[i] = 30;
                    break;
            }
        }
        int[] Ryear = Pyear;
        Ryear[1] = 29;
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入年份:");
        int year = scanner.nextInt();
        System.out.println("请输入月份:");
        int month = scanner.nextInt();
        System.out.println("请输入日期:");
        int day = scanner.nextInt();
        int total = 0;
        boolean flag = (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
        for (int i = 1990; i < year; i++) {
            if (flag) {
                total += 366;
            } else {
                total += 365;
            }
        }
        for (int i = 0; i < month - 1; i++) {
            if (flag) {
                total += Ryear[i];
            } else {
                total += Pyear[i];
            }
        }
        int res = total % 5;
        if (res == 1 || res == 2 || res == 3) {
            System.out.print(year + "年" + month + "月" + day + "日"
                    + "这天打鱼,距第一天过去了"+total+"天");
        } else {
            System.out.print(year + "年" + month + "月" + day + "日"
                    + "这天晒网,距第一天过去了"+total+"天");package com.dyy.exam;