Java分支结构详解

前言

推荐一个网站给想要了解或者学习人工智能知识的读者,这个网站里内容讲解通俗易懂且风趣幽默,对我帮助很大。我想与大家分享这个宝藏网站,请点击下方链接查看。 https://www.captainbed.cn/f1

Java中的分支结构用于根据条件执行不同的代码块,包括if-else语句、switch语句等,实现程序流程的控制。


一、if 语句

在Java中,if语句是一个条件控制语句,用于根据条件的真假决定是否执行特定的代码块。

if语句中,条件是一个布尔表达式,可以是一个比较表达式(例如==!=><等),也可以是一个逻辑表达式(例如&&||!等)。

基本语法

表示一
代码语言:javascript
复制
if(布尔表达式){
    //条件满足时执行代码
}
表示二
代码语言:javascript
复制
if(布尔表达式){
    //条件满足时执行代码
}else{
    //条件不满足时执行代码
}
表示三
代码语言:javascript
复制
if(布尔表达式){
    //条件满足时执行代码
}else if(布尔表达式){
    //条件满足时执行代码
}else{
    //条件都不满足时执行代码
}

代码示例

判定一个数字是奇数还是偶数
代码语言:javascript
复制
public static void main(String[] args) {
    int num = 10;
    if (num % 2 == 0) {
        System.out.println("num 是偶数");
    } else {
        System.out.println("num 是奇数");
    }
}

以上代码是一个Java程序的主方法,程序开始执行的入口。在主方法中,定义了一个整型变量num,并初始化为10。

接下来使用if-else语句判断num是否是偶数。条件表达式num % 2 == 0用于判断num是否可以被2整除,如果可以,则说明num是偶数,执行if语句中的代码块,打印出"num 是偶数"。

如果条件表达式的结果为false,即num不能被2整除,说明num是奇数,执行else语句中的代码块,打印出"num 是奇数"。

因为num的值为10,可以被2整除,所以输出结果为"num 是偶数"。

判定一个数字是正数还是负数
代码语言:javascript
复制
public static void main(String[] args) {
    int num = 10;
    if (num > 0) {
        System.out.println("num 是正数");
    } else if (num < 0) {
        System.out.println("num 是负数");
    } else {
        System.out.println("num 是 0");
    }
}

以上代码是一个Java程序的主方法,程序开始执行的入口。在主方法中,定义了一个整型变量num,并初始化为10。

接下来使用if-else if-else语句对num的值进行判断。首先判断num是否大于0,如果条件表达式num > 0的结果为true,则执行if语句中的代码块,打印出"num 是正数"。

如果条件表达式num > 0的结果为false,则继续判断num是否小于0。如果条件表达式num < 0的结果为true,则执行else if语句中的代码块,打印出"num 是负数"。

如果以上两个条件表达式的结果都为false,说明num等于0,执行else语句中的代码块,打印出"num 是 0"。

因为num的值为10,大于0,所以输出结果为"num 是正数"。

判定某一年份是否是闰年
代码语言:javascript
复制
public static void main(String[] args) {
    int year = 2000;
    if (year % 100 == 0) {
        // 判定世纪闰年
        if (year % 400 == 0) {
            System.out.println("是闰年");
        } else {
            System.out.println("不是闰年");
        }
    } else {
        // 普通闰年
        if (year % 4 == 0) {
            System.out.println("是闰年");
        } else {
            System.out.println("不是闰年");
        }
    }
}

以上代码是一个Java程序的主方法,程序开始执行的入口。在主方法中,定义了一个整型变量year,并初始化为2000。

接下来使用嵌套的if-else语句对year进行判断,判断year是否是闰年。

首先判断year是否能被100整除,即条件表达式year % 100 == 0的结果。如果条件表达式的结果为true,则执行if语句中的代码块,进一步判断是否是世纪闰年。

if语句中,判断year是否能被400整除,即条件表达式year % 400 == 0的结果。如果条件表达式的结果为true,则输出"是闰年"。如果条件表达式的结果为false,则输出"不是闰年"。

如果条件表达式year % 100 == 0的结果为false,则执行else语句中的代码块,判断是否是普通闰年。

else语句中,判断year是否能被4整除,即条件表达式year % 4 == 0的结果。如果条件表达式的结果为true,则输出"是闰年"。如果条件表达式的结果为false,则输出"不是闰年"。

因为year的值为2000,满足条件year % 100 == 0,进一步满足条件year % 400 == 0,所以输出结果为"是闰年"。

注意要点

悬垂 else 问题
代码语言:javascript
复制
public static void main(String[] args) {
    int x = 10;
    int y = 10;
    if (x == 10)
        if (y == 10)
            System.out.println("aaa");
        else
            System.out.println("bbb");
}

if / else 语句中可以不加 大括号 . 但是也可以写语句(只能写一条语句).

此时 else 是和最接近的 if 匹配.

但是实际开发中我们 不建议 这么写. 最好加上大括号

代码风格问题
代码语言:javascript
复制
public static void main(String[] args) {
    // 风格1
    int x = 10;
    if (x == 10) {
 // 满足条件
    } else {
 // 不满足条件
    }
// 风格2
    int x = 10;
    if (x == 10)
    {
 // 满足条件
    }
    else
    {
 // 不满足条件
    }
}

虽然两种方式都是合法的, 但是 Java 中更推荐使用风格1, { 放在 if / else 同一行.

分号问题
代码语言:javascript
复制
public static void main(String[] args) {
    int x = 20;
    if (x == 10); {
        System.out.println("hehe");
    }
}

此处多写了一个 分号, 导致分号成为了 if 语句的语句体, 而 { } 中的代码已经成为了和一个 if 无关的代码块.

二、switch 语句

基本语法

代码语言:javascript
复制
public static void main(String[] args) {
    switch(整数|枚举|字符|字符串){
        case 内容1 : {
            内容满足时执行语句;
 [break;]
        }
        case 内容2 : {
            内容满足时执行语句;
 [break;]
        }
 ...
        default:{
            内容都不满足时执行语句;
 [break;]
        }
    }
}

代码示例

根据 day 的值输出星期
代码语言:javascript
复制
public static void main(String[] args) {
    int day = 1;
    switch(day) {
        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("输入有误");
            break;
    }
}

这段代码使用了Switch语句来根据一个整型变量day的值输出对应的星期几。Switch语句中的每个case对应了一个可能的day值,当day的值满足某个case时,会执行该case下的语句,并且使用break语句跳出Switch语句。如果day的值不满足任何一个case,那么会执行default下的语句。在这段代码中,day的值为1,所以输出为"星期一"。

根据 switch 中值的不同, 会执行对应的 case 语句.

遇到 break 就会结束该 case 语句.

如果 switch 中的值没有匹配的 case, 就会执行 default 中的语句.

我们建议一个 switch 语句最好都要带上 default.

注意事项

break 不要遗漏

否则会失去 “多分支选择” 的效果

代码语言:javascript
复制
public static void main(String[] args) {
    int day = 1;
    switch(day) {
        case 1:
            System.out.println("星期一");
            // break;
        case 2:
            System.out.println("星期二");
            break;
    }
}

我们发现, 不写 break 的时候, case 语句会依次向下执行, 从而失去了多分支的效果.

switch 中的值只能是 整数|枚举|字符|字符串
代码语言:javascript
复制
public static void main(String[] args) {
    double num = 1.0;
    switch(num) {
        case 1.0:
            System.out.println("hehe");
            break;
        case 2.0:
            System.out.println("haha");
            break;
    }
}
switch 不能表达复杂的条件
代码语言:javascript
复制
public static void main(String[] args) {
    // 例如: 如果 num 的值在 10 到 20 之间, 就打印 hehe
// 这样的代码使用 if 很容易表达, 但是使用 switch 就无法表示.
    if (num > 10 && num < 20) {
        System.out.println("hehe");
    }
}
switch嵌套

虽然可以运行,但是不美观,少用

代码语言:javascript
复制
public static void main(String[] args) {
    int x = 1;
    int y = 1;
    switch(x) {
        case 1:
            switch(y) {
                case 1:
                    System.out.println("hehe");
                    break;
            }
            break;
        case 2:
            System.out.println("haha");
            break;
    }
}