条件判断语句

很多时候我们编写的代码并不会想目前为止的所有示例代码那样–程序从main()方法里面的第一行代码开始一行一行地执行,而是会基于一定条件来执行对应的代码。如果我们需要依据条件是否满足来采取不同的行动,就需要使用到条件判断语句。

在Java中,条件判断语句的基本语法结构如下,

if (测试条件满足) {
    ... 
}

这里单词if是Java里面的保留关键词,圆括号里面的测试条件可以是任何能够返回布尔类型的表达式,花括号里面是当测试条件满足时需要程序执行的代码。在编程术语里面,由一对花括号包围起来的所有代码往往叫做代码块,英文是“Code Block”。

接下来仍然通过代码来帮助大家深刻理解Java里面的条件判断语句。

假设现在有一个用户,当其年龄小于18岁时,可以让程序进行一个温馨提示。不妨先声明一个变量表示用户年龄,哪怕当后期需要变更判断条件,比如当用户年龄小于24岁时才进行提示,这样代码里面需要更改的地方就会变得很少,灵活性更好。

int userAge = 16;

这里我基于变量的命名规范声明并初始化了一个int型变量userAge,用来表示某个用户的年龄。后面大家可能经常会发现,在教程中我会用类似于“int型变量”这样的称谓来指代常规整型,这样表达更简明准确。

接下来就是编写条件判断语句的代码部分。如果我们需要程序判断当用户年龄小于18时,提示一句“您是未成年,可以享受部分折扣~”,可以像这样编写代码,

if (userAge < 18) {
    System.out.println("您是未成年,可以享受部分折扣~");
}

当程序在执行上面这段代码时,它会首先测试判断条件“userAge < 18”是否满足。若判断条件成立,则继续执行后面的代码块。这里我们的用户年龄为16,小于18岁,判断条件成立,所以程序会执行println()语句。在Java中,由分号“;”结尾的一整行代码往往叫做一条代码语句,或者直接简称一条语句。语句是由表达式构建成的。

如果代码块里面只有一条语句,可以省略花括号,像这样,

if (userAge < 18)
    System.out.println("您是未成年,可以享受部分折扣~");

对于我们学习编程,大家统一步调选择不省略代码块外面的花括号,知道Java是支持这样编写代码就行了。

现在正是最好的时候来学习逻辑操作符。Java也支持逻辑运算,如逻辑与(&&)、逻辑或(||)、逻辑非(!),很多时候直接简称与或非。

对于与运算,当左右两边的条件均成立时,最终条件才成立。假设像这样编写代码

if (userAge > 12 && userAge < 18) {
    System.out.println("您是青少年,可以享受部分额外折扣~");
}

只有当用户年龄userAge大于12岁且小于18岁时,测试条件才成立。

对于或运算,当左右两边的条件只要有一个成立,则最终条件就成立。假设现在条件判断语句的测试条件变成用户小于18岁或者只要用户是学生,那么就可以享受部分折扣。

让我们一起来编写代码。不妨先声明一个布尔类型的变量student,当其值为true时表示是学生,为false则表示不是学生。

boolean student = true;

接下来的条件判断语句的代码部分可以这样编写,

if (userAge < 18 || student == true) {
    System.out.println("您是青少年或者在校学生,可以享受部分折扣~");
}

哪怕用户年龄超过18岁,但只要其是一名学生,那么运行上面这段代码都会在屏幕上打印

您是青少年或者在校学生,可以享受部分折扣~

对于非运算,当条件成立时,则取非后的最终条件不成立;反之当条件不成立时,则取非后的最终条件成立。

假设我们像下面这样编写代码,

if (!student) {
    System.out.println("抱歉,您不是学生,不能享受学习折扣~");
}

当变量student的值为false时,if测试条件成立,如果运行这行代码屏幕上会打印

抱歉,您不是学生,不能享受学习折扣~

前面的代码里面使用了一种简洁用法,没有将布尔类型的变量student与布尔字面值“true”进行比较,因为比较运算的结果也是一个布尔类型。这样编写代码更简洁明了。

对于if条件判断语句,如果想要程序在测试条件不成立时,执行其他代码,那么可以在后面添加一个else代码块。

if (student) {
    System.out.println("您是学生,可以享受学习折扣~");
} else {
    System.out.println("抱歉,您不是学生,不能享受学习折扣~");
}

假设现在变量student的值为false,如果运行这段代码,则大家的屏幕上会打印

抱歉,您不是学生,不能享受学习折扣~

相反,若stduent的值为true,则程序会在屏幕上打印

您是学生,可以享受学习折扣~

上面示例代码里面的结构也常常叫做if-else条件判断语句。类似的结构也可以通过Java里面的三元操作符(?:)来实现。

int currentSpeed = 100;
boolean positive = true;
currentSpeed = positive ? currentSpeed+10 : currentSpeed-10;

这里分别声明了一个int型变量currentSpeed和一个布尔类型变量positive,分别用来表示汽车的当前时速,以及是否需要加速还是减速。第三行代码先判断测试条件是否成立,若成立就执行加法运算,并将结果再次赋值给变量currentSpeed;反之测试条件不成立,就执行冒号(:)右边的减法运算,并将结果赋值给变量currentSpeed。

第三行代码等效于下面这段代码,

if (positive) {
    currentSpeed += 10;
} else {
    currentSpeed -= 10;
}

关于为什么叫做三元操作符,是因为其有三个操作数。以这里的代码为例,第一个操作数是问号(?)前面的判断条件(positive是否为true),第二个操作数是冒号(:)左边的表达式(currentSpeed+10),第三个操作数是冒号右边的表达式(currentSpeed-10)。

与很多其他编程语言一样,Java也支持多次条件判断语句。当某个测试条件成立,则对应的代码块就会执行。

if (userAge < 18) {
    System.out.println("您是未成年,可以享受部分折扣~");
} else if (student) {
    System.out.println("您是学生,可以享受学习折扣~");
} else {
    System.out.println("抱歉,您不能享受折扣~");
}

这段代码里面当测试条件(userAge < 18)成立,则程序会执行第一个代码块里面的所有代码;若第一个测试条件不成立,就继续判断第二个测试条件是否成立,若成立就执行第二个代码块里面的代码;若是前面两个测试条件都不成立,程序就会执行else代码块里面的所有代码。

Java除了支持多次条件判断语句,而且代码块里面还可以内嵌其他条件判断语句。以下面这段代码为例,

if (userAge <= 18) {
    if (userAge < 14) {
        System.out.println("您的年龄小于14岁");
    } else {
        System.out.println("您的年龄在14岁到18岁");
    }
}

如果变量userAge的当前值为16,则最外层测试条件成立,程序继续执行代码块里面的所有代码。外层代码块里面又是另外一个if-else条件判断语句,这时的条件上下文是userAge <= 18。由于用户年龄userAge为16,所以最外层代码块里面的else代码块会被执行。

以上就是本节教程的全部内容,这里仍然贴上完整代码供大家参考学习。

public class IfDemo {
    public static void main(String[] args) {
        int userAge = 16;

        if (userAge < 18) {
            System.out.println("您是未成年,可以享受部分折扣~");
        }

        // if (userAge < 18)
        //     System.out.println("您是未成年,可以享受部分折扣~");

        // 逻辑与
        if (userAge > 12 && userAge < 18) {
            System.out.println("您是青少年,可以享受部分额外折扣~");
        }

        boolean student = true;

        // 逻辑或
        if (userAge < 18 || student == true) {
            System.out.println("您是青少年或者在校学生,可以享受部分折扣~");
        }

        student = false;

        // 逻辑非
        if (!student) {
            System.out.println("抱歉,您不是学生,不能享受学习折扣~");
        }

        student = true;

        // if-else条件判断语句
        if (student) {
            System.out.println("您是学生,可以享受学习折扣~");
        } else {
            System.out.println("抱歉,您不是学生,不能享受学习折扣~");
        }

        int currentSpeed = 100;
        boolean positive = true;

        // 三元操作符
        currentSpeed = positive ? currentSpeed+10 : currentSpeed-10;

        System.out.println(currentSpeed);

        // if (positive) {
        //     currentSpeed += 10;
        // } else {
        //     currentSpeed -= 10;
        // }

        userAge = 22;

        // 多次条件判断语句
        if (userAge < 18) {
            System.out.println("您是未成年,可以享受部分折扣~");
        } else if (student) {
            System.out.println("您是学生,可以享受学习折扣~");
        } else {
            System.out.println("抱歉,您不能享受折扣~");
        }

        userAge = 16;

        // 条件判断语句可以内嵌
        if (userAge <= 18) {
            if (userAge < 14) {
                System.out.println("您的年龄小于14岁");
            } else {
                System.out.println("您的年龄在14岁到18岁");
            }
        }
    }
}

Comments

No comments yet. Why don’t you start the discussion?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注