很多时候我们编写的代码并不会想目前为止的所有示例代码那样–程序从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岁");
}
}
}
}