前面我们也编写过程序,只不过我们的程序都是执行完第一条语句后便依次执行第二条、第三条、第四条……一直到最后,程序从头到尾所有的语句都将按部就班的被执行,没有漏掉任何一条语句,这种结构我们称之为顺序结构。即顺序结构是将程序的每一条语句都按顺序执行一遍。
之前我们还写过一个输入半径计算圆的面积的程序:
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)
语句2
…
else 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语句实现计算身体质量指数
好的,这一部分到此结束