Java流程控制-选择结构:if语句、if-else语句与if语句的嵌套

前面我们也编写过程序,只不过我们的程序都是执行完第一条语句后便依次执行第二条、第三条、第四条……一直到最后,程序从头到尾所有的语句都将按部就班的被执行,没有漏掉任何一条语句,这种结构我们称之为顺序结构。即顺序结构是将程序的每一条语句按顺序执行一遍。
之前我们还写过一个输入半径计算圆的面积的程序:

import java.util.Scanner;

public class Demo {
    
    

	public static void main(String[] args) {
    
    
		Scanner sc = new Scanner(System.in);
		
		System.out.print("请输入圆的半径:");
		float radius = sc.nextFloat();//圆的半径
		
		double area = Math.PI * radius * radius;//计算圆的面积
		
		System.out.println("圆的半径:"+radius);
		System.out.printf("圆的面积:%.2f\n", area);
		
		sc.close();
}
}

但是如果给一个计算圆形的面积的程序中的半径赋一个负值,那么程序就会打印出一个非法的结果。如果半径为负,那你肯定是不希望计算面积的。如何处理这个问题呢?

那我们这里就需要选择结构


先来学习选择结构最简单的if语句

if语句

if语句是一种单向结构。
其语法结构为:

if(布尔表达式){
    
    
 语句
}

这个结构用流程图表示为:
在这里插入图片描述
如果不满足布尔表达式,它将会跳过某些语句或者功能。因此我们将其加入到我们最开始的程序当中,下面是改进后的代码:

import java.util.Scanner;

public class Demo {
    
    

	public static void main(String[] args) {
    
    
		Scanner sc = new Scanner(System.in);
		
		System.out.print("请输入圆的半径:");
		float radius = sc.nextFloat();//圆的半径
		
		if(radius >=0) {
    
    
			double area = Math.PI * radius * radius;//计算圆的面积
			
			System.out.println("圆的半径:"+radius);
			System.out.printf("圆的面积:%.2f\n", area);
		}
		sc.close();
}
}

这时,如果我们再输入一个负值,那么程序就什么都不会去执行。

对于if语句,使用时应注意,条件语句即布尔表达式一定要放在英文半角“()”内。特别的,当执行语句只有一条时,可以省略那一对大括号。如下图:
在这里插入图片描述

对if语句而言,除了标点符号的错误,最常见的错误是在条件语句后的括号后加分号。如果在条件语句后的括号后加分号,表示空语句,将会使条件无论是否成立均执行后面的语句。这个错误不会报错因而不容易查找,属于逻辑错误,要格外注意。

【案例】简单的if演示
编写一个程序提醒用户输入一个整数。如果这个数能被5整除就显示HiFive,如果这个数能被2整除就显示HiEven。

示例代码:

package Java_Programming_Class;
import java.util.Scanner;;
public class _3_1_Hit {
    
    

	public static void main(String[] args) {
    
    
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个整数:");
		int n = sc.nextInt();
		
		if(n % 5 == 0) {
    
    //能被5整除
			System.out.println("HitFive");
		}
		if(n % 2 == 0) {
    
    //能被2整除
			System.out.println("HitEven");
		}
		sc.close();
	}

}

额外补充一点,在引入Scanner类后,编写结束你会发现在使用scanner语句进行读取输入的行的左侧出现了报警。这是因为我们在调用输入流时没有关闭,在程序最后加上sc.close();便可关闭,虽然现在不加也不会影响程序运行,但是养成一个加上它的好习惯是十分必要的。

if-else语句

在我们使用if结构解决问题的时候总会觉得少了一点什么,当条件满足的时候去做这样一件事情,当条件不满足的时候就不声不响的跳过去了。这样会让人以为自己的程序写错了。我们希望在我们输错的时候能被告知,这时候我们就需要让计算机作出两种选择:当我的指令是正确的,计算机执行事件A;当我的指令是错误的,计算机能执行事件B。我们怎么实现这样一个功能呢?这就用到了if-else语句。
很显然,if-else语句是一个二分支语句。它的语法是:

if (布尔表达式) {
    
    
布尔表达式为真时执行的语句(多条语句一定要使用花括号,单条语句可省略)
}
else {
    
    
布尔表达式为假时执行的语句(多条语句一定要使用花括号,单条语句可省略)
}

同样的,if-else语句的语法结构用流程图表示为:
在这里插入图片描述
可以看到此时的选择结构便可分为两种。通过if-else语句的这种特性,我们可以对文章开头的程序进行再次改进:

import java.util.Scanner;

public class Demo {
    
    

	public static void main(String[] args) {
    
    
		Scanner sc = new Scanner(System.in);
		
		System.out.print("请输入圆的半径:");
		float radius = sc.nextFloat();//圆的半径
		
		if(radius >=0) {
    
    
			double area = Math.PI * radius * radius;//计算圆的面积
			
			System.out.println("圆的半径:"+radius);
			System.out.printf("圆的面积:%.2f\n", area);
		}else {
    
    
			System.out.println("圆的半径输入错误!");
		}
		sc.close();
}
}

这时,我们的程序便较为完善了。

对于if语句与if-else语句的使用,另可参考我的另一篇文章:
Java选择结构示例1:使用if语句与if-else语句判断闰年应用


if语句的嵌套

我们前面学习的if语句只能提供单一的选择,那我们后学习的if-else语句也只能提供二种选择。如果我们需要更多的选择时,我们可以考虑嵌套的if语句。
if语句中可以包含if语句,从而形成if语句的嵌套。
语法结构:

if (布尔表达式1)
	语句1
else if (布尔表达式2)
	语句2else if (布尔表达式n)
			语句n

对于嵌套的使用,我们要合理化使用缩进,避免过渡缩进。例如:
在这里插入图片描述
嵌套后的if语句和if-else语句有很多选择,但是只能选择其中一种。之后便会退出if语句。

注意:
1.else语句总是和跟它在同一块中离它最近的if匹配,例如:
在这里插入图片描述
2.前面的语句什么也不会输出。如果想让else子句匹配第一个if子句,必须加上一对花括号

int i = 1;
	int j = 2;
	int k = 3;
	if (i > k) {
    
    
		System.out.println(“A”);
	}
	else
		System.out.println(“B”);

这条语句输出B。

常见错误

在if子句后面加一个分号是一种常见错误。

if (radius >= 0);
{
    
    
area = radius*radius*PI;
System.out.println(“The area for the circle of radius “+radius+”is”+area);
}

这个错误很难发现,因为它既不是编译错误也不是运行错误,而是一个逻辑错误.
使用下行风格时经常会犯这种错误.

提示:
在这里插入图片描述
注意:
在这里插入图片描述
接下来做一个案例:
月份天数
使用if语句的嵌套结构编程实现给出年份和月份,输出该某年某月的天数.
运行代码;

import java.util.Scanner;

public class MonthDays {
    
    

	public static void main(String[] args) {
    
    
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入年份:");
		int year = sc.nextInt();
		System.out.println("请输入月份:");
		int month = sc.nextInt();
		
		int days = 0;
		
		if(month == 1 || month == 3 || month == 5 || month ==7 || month == 8 || month == 10 || month == 12) {
    
    
			days = 31;
		}else if (month == 4 || month == 6 || month == 9 || month == 11) {
    
    
			days = 30;
		}else if (month == 2) {
    
    
			if (year %4 == 0 && year % 100 != 0 || year % 400 ==0) {
    
    
				days = 29;
			}else {
    
    
				days = 28;
			}
		}else {
    
    
			System.out.println("输入月份有误!");
			return;
		}
		
		System.out.println(year+"年"+month+"月,有"+days+"天.");
	}

}

对于嵌套的使用,可参考:
Java流程控制示例2:用if语句实现计算身体质量指数


好的,这一部分到此结束

猜你喜欢

转载自blog.csdn.net/m0_46700215/article/details/105776275
今日推荐