目录
一、if语句的嵌套
在实际开发中,我们经常会面临多重判断和选择的情况,这种时候就需要用到if语句的嵌套。if语句的嵌套是指在if语句块或者else语句块中,又包含了另外一个或多个if语句,其一般形式如下:
if (表达式1) {
if(表达式2) {
语句块1;
} else {
语句块2;
}
} else {
if(表达式3) {
语句块3;
} else {
语句块4;
}
}
使用if语句的嵌套,可将判断的条件进行细化,从而实现更复杂的判断和操作。其中,if语句、if-else语句、else-if语句可以根据实际需要,互相进行嵌套。
例如:小明参加java的期末考试,得分为88分,请根据如下的等级划分规则判断他的考试等级。
90~100:优秀 80~89:良好 60~79:及格 60以下:不及格
package basic;
public class JavaTestLevel {
public static void main(String[] args) {
int score;
score = 88;
if (score >= 90 && score <= 100) {
System.out.println("优秀");
} else if (score >= 80 && score <= 89) {
System.out.println("良好");
} else if (score >= 60 && score <= 79) {
System.out.println("及格");
} else
System.out.println("不及格");
} // of if
} // of class JavaTestLevel
二、布尔类型
1.布尔类型的基本概念
在java中,布尔类型boolean用来表示逻辑值,一般用于程序流程控制,包括:if条件控制语句、while循环控制语句、do-while循环控制语句、for循环控制语句等。布尔类型boolean只有两个取值,即true和false,没有null。
2.boolean关键字
在java中,布尔类型用关键字boolean来定义,例如:
boolean isRain = true;
boolean isStudent = false;
下面,我们再用一段代码来验证布尔类型boolean是否用1和0代替true和false。
package basic;
public class Boolean {
public static void main(String[] args) {
boolean flag = 1;
boolean success = 0;
}
}
根据运行结果给出的提示,我们可以知道在java中,布尔类型boolean只有true和false两个取值,不能用1和0来代替true和false。
3.逻辑运算
在java中,逻辑运算符主要有三个,分别是与(&&)、或(||)、非(!),这三者的运算结果都为布尔类型,并且与(&&)、或(||)要求左右两边的表达式也为布尔类型。
3.1与(&&)
逻辑运算中的与(&&)相当于数学运算中的“且”,满足“全真才真,一假即假”。
(表达式1)&&(表达式2)的相关结果如下表:
表达式1 | 表达式2 | 运算结果 |
真 | 真 | 真 |
真 | 假 | 假 |
假 | 真 | 假 |
假 | 假 | 假 |
3.2或(||)
逻辑运算中的或(||)相当于数学运算中的“或”,满足“全假才假,一真即真”。
(表达式1)||(表达式2)的相关结果如下表:
表达式1 | 表达式2 | 运算结果 |
真 | 真 | 真 |
真 | 假 | 真 |
假 | 真 | 真 |
假 | 假 | 假 |
3.3非(!)
逻辑运算中的非(!)满足“真变假,假变真”。
!(表达式)的相关结果如下表:
表达式 | 运算结果 |
真 | 假 |
假 | 真 |
3.4短路取值
对于(表达式1)&&(表达式2),如果表达式1 的值是false,那么最后的结果就是false,就不会继续判断表达式2。
对于(表达式1)||(表达式2),如果表达式1 的值是true,那么最后的结果就是true,就不会继续判断表达式2。
三、闰年的判断
1.判断思路
要判断闰年,首先我们需要知道到底什么才是闰年?查阅相关资料可知,闰年分为两种,一种是普通闰年(公历年份是4的倍数,且不是100的倍数,例如:2004年、2020年),另一种是世纪闰年(公历年份整百数的,且是400的倍数,例如:2000年)。
1.1用逻辑运算语句判断是否为闰年
1.1.1抽象为逻辑运算语句
普通闰年用逻辑运算符可表示为如下代码,当结果为true时,就是普通闰年。
(paraYear % 4 == 0) && (paraYear % 100 != 0)
世纪闰年用逻辑运算符可表示为如下代码,当结果为true时,就是世纪闰年。
(paraYear % 100 == 0) && (paraYear % 400 == 0)
综合两种闰年,当如下代码的结果为true时,就是闰年。
(paraYear % 4 == 0) && (paraYear % 100 != 0) || (paraYear % 400 == 0)
1.1.2定义逻辑运算语句的方法
再定义用逻辑运算符判断闰年的方法,如下:
/**
*********************
*Is the given year leap?
*
* @param paraYear The given year.
*********************
*/
public static boolean isLeapYear(int paraYear) {
if((paraYear % 4 == 0) && (paraYear % 100 != 0) || (paraYear % 400 == 0)) {
return true;
} else {
return false;
} // of if
} // of isLeapYear
1.2用if语句的嵌套判断是否为闰年
1.2.1思路流程图和盒图
我们得到一个公历年份y后,首先判断y是不是4的倍数(即y能否被4整除),如果y不是4的倍数,那么就已经可以判断y不是闰年;如果y是4的倍数,再继续判断y是不是100的倍数,如果y不是100的倍数,那么可以得知y是闰年;如果y是100的倍数,就再判断y是不是400的倍数,如果y不是400的倍数,那么y就不是闰年,如果y是400的倍数,那么y就是闰年。
将以上文字用图解表示如下:
1.2.2定义if语句嵌套的方法
/**
*********************
*Is the given year leap? Replace the complex condition with a number of if.
*
* @param paraYear The given year.
*********************
*/
public static boolean isLeapYearV2(int paraYear) {
if(paraYear % 4 != 0) {
return false;
} else if (paraYear % 400 == 0) {
return true;
} else if (paraYear % 100 == 0) {
return false;
} else {
return true;
} // of if
} // of isLeapYearV2
2.LeapYear.java
程序代码:
package basic;
/**
*The complex usage of the if statement.
*
*@auther Xin Lin 3101540094@qq.com.
*/
public class LeapYear {
/**
*********************
*The entrance of the program.
*
* @param args Not used now.
*********************
*/
public static void main(String[] args) {
// Test isLeapYear
int tempYear = 2021;
System.out.print("" + tempYear + " is ");
if(!isLeapYear(tempYear)) {
System.out.print("NOT ");
} // of if
System.out.println("a leap year.");
tempYear = 2000;
System.out.print("" + tempYear + " is ");
if(!isLeapYear(tempYear)) {
System.out.print("NOT ");
} // of if
System.out.println("a leap year.");
tempYear = 2100;
System.out.print("" + tempYear + " is ");
if(!isLeapYear(tempYear)) {
System.out.print("NOT ");
} // of if
System.out.println("a leap year.");
tempYear = 2004;
System.out.print("" + tempYear + " is ");
if(!isLeapYear(tempYear)) {
System.out.print("NOT ");
} // of if
System.out.println("a leap year.");
// Test isLeapYearV2
System.out.println("Now use the second version.");
tempYear = 2021;
System.out.print("" + tempYear + " is ");
if(!isLeapYearV2(tempYear)) {
System.out.print("NOT ");
} // of if
System.out.println("a leap year.");
tempYear = 2000;
System.out.print("" + tempYear + " is ");
if(!isLeapYearV2(tempYear)) {
System.out.print("NOT ");
} // of if
System.out.println("a leap year.");
tempYear = 2100;
System.out.print("" + tempYear + " is ");
if(!isLeapYearV2(tempYear)) {
System.out.print("NOT ");
} // of if
System.out.println("a leap year.");
tempYear = 2004;
System.out.print("" + tempYear + " is ");
if(!isLeapYearV2(tempYear)) {
System.out.print("NOT ");
} // of if
System.out.println("a leap year.");
} // of main
/**
*********************
*Is the given year leap?
*
* @param paraYear The given year.
*********************
*/
public static boolean isLeapYear(int paraYear) {
if((paraYear % 4 == 0) && (paraYear % 100 != 0) || (paraYear % 400 == 0)) {
return true;
} else {
return false;
} // of if
} // of isLeapYear
/**
*********************
*Is the given year leap? Replace the complex condition with a number of if.
*
* @param paraYear The given year.
*********************
*/
public static boolean isLeapYearV2(int paraYear) {
if(paraYear % 4 != 0) {
return false;
} else if (paraYear % 400 == 0) {
return true;
} else if (paraYear % 100 == 0) {
return false;
} else {
return true;
} // of if
} // of isLeapYearV2
} // of class LeapYear
运行结果:
总结
1.不管学习哪种语言,闰年的判断都是一个非常经典的问题,可以很好的反映程序语言的逻辑性。
2.在复杂的if语句嵌套中,一定要注意if与else的配对情况,else总是与其前面距离最近且未配对的if进行配对,即满足就近原则。
3.布尔类型boolean的取值只有true和false,不能用1和0代替。