Java 条件选择语句

本文最后更新于:2024年3月18日 凌晨

Java 条件选择语句

if语句

无else的if语句

其格式如下:

1
2
3
if(条件表达式){
if块;
}

说明

  • 如果条件表达式的值为真,则执行"if块"部分的语句,否则直接执行后续语句。
  • 用大括号括住要执行一组语句,也称语句块,语句块以"{“表示块的开始,以”}"表示块的结束,如果要执行的if块为单条语句,可以省略大括号。

[例3-1]:从键盘输入3个整数,输出其中的最大者。

程序代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Ex3_1{
public static void mian(String args[]){
int a,b,c,max;
String s;
s = JOptionPane.showInputDialog("输入第1个整型数:");
a = Integer.parseInt(s);
s = JOptionPane.showInputDialog("输入第2个整型数:");
b = Integer.parseInt(s);
s = JOptionPane.showInputDialog("输入第3个整型数:");
c = Integer.parseInt(s);
max = a;
if(b > max)
max = b;
if(c > max)
max = c;
JOptionPane.showInputDialog(null,"最大值是:"+max);
}
}

说明:第6~11行采用Swing对话框获取输入数据并转换为整数给a,b,c三个变量赋值,第12~16行是完成求最大值的核心,先假定a最大,以后的b和c分别与最大还大,则自己最大,第17行通过String消息对话框显示输出结果。

带else的if语句

1
2
3
4
5
6
if(条件表达式){
if块;
}
else{
else块;
}

说明

  • 该格式是一种更常见的形式,即if与else配套使用,所以一般称做if…else语句,如果条件表达式为真,执行"if块"的代码,否则执行"else块"的代码。

  • "if块"和"else块"为单条语句,可以省略大括号。

if语句的嵌套

在稍微复杂额编程中,常出现条件的分支不止两种情况,一种方法是用if嵌套来解决,所谓if嵌套就是在if语句的"if块 "或"else块"中继续含有if语句。

1
2
3
4
5
6
7
8
9
if(条件表达式){
if(条件表达式){
if块;
}
if块;
}
else{
else块;
}

例如,上面求a,b,c3个数中的最大数,也可以采用if嵌套来实现。

1
2
3
4
5
6
7
8
9
10
11
12
if(a>b){
if(a>c)
System.out.println("三个数中最大值是:"+a);
else
System.out.println("三个数中最大值是:"+c);
}
else{ //a<=b的情况。
if(a>c)
System.out.println("三个数中最大值是:"+b);
else
System.out.println("三个数中最大值是:"+c);
}

关于if嵌套要注意的一个问题是if与else的匹配问题,由于if语句有带else和不带else两种形式,编译程序在给else语句寻找匹配的if语句时是按最近匹配原则来配对的,所以在出现if嵌套时最好用花括号来标识清楚相应的块。

阶梯else if

阶梯else if是嵌套if中一种特殊情况的简写形式,这种特殊情况就是"else块"中逐层嵌套if语句,使用阶梯else if可以使程序更简短和清晰。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if(条件表达式){
if块;
}
else if(条件表达式){
else块;
}
else if(条件表达式){
else块;
}
else if(条件表达式){
else块;
}
else{
else块;
}

[例3-2]:输入一个学生的成绩,根据所在分数段输出信息,0~59输出"不及格",60~69输出"及格",70~79输出"中",80~89输出"良",90以上输出"优"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Ex3_2{
public static void mian(String args[]){
int s;
s = Integer.parseInt(JOptionPane.showInputDialog("输入分数:"));
if(s<60){
System.out.println("不及格");
}
else if(s<70){
System.out.println("及格");
}
else if(s<80){
System.out.println("中");
}
else if(s<90){
System.out.println("良");
}else
System.out.println("优");
}
}
  • 说明:该程序是if嵌套的一种比较特殊的情况,除了最后一个else外,其他3个else的语句块中正好是一个if语句。
  • 注意:在else if中条件的排列是按照范围逐步缩小的,下一个条件是上一个条件不满足情况下的一种限制,例如,条件s<90处实际上包括s>=80的限制。

多分支语句switch

对于多分支的处理,Java提供了switch语句,其格式如下:

1
2
3
4
5
6
7
8
9
Switch(expression)
{
Case value1:语句块1;break;// 分支一。
Case value2:语句块2;break;// 分支二。
Case value3:语句块3;break;// 分支三。
......
Case valueN:语句块N;break;// 分支N
[default:默认语句块;]// 分支n+1,均不符合其他case分支。
}

说明

  • switch语句执行时首先计算表达式的值,这个值可以是整型,字符型或字符串类型(其中字符串类型是在JDK1.7中新增的支持),同时要与case分支的判断值的类型一致,计算出表达式的值后,它首先与第一个case分支进行比较,若相同,执行第一个case分支的语句块,否则再检查第二个case分支,以此类推。
  • case子句的值valueN必须是常量,各个case子句中的值不同。
  • 如果没有匹配情况,就执行default指定的语句,但default子句本身是可选的。
  • break语句用来在执行完一个case分支后,使程序跳出switch语句,即终止switch语句的执行,否则,找到一个匹配的情况后面所有的语句都会被执行,直到遇到break为止,在特殊情况下,多个不同的case值要执行一组相同的操作,这时可以不用break

注意:在Java 5以前,switch(expr)中,expr只能是byte,short,char,int,从Java 5开始,Java中引入了枚举类型,expr也可以是enum类型,从Java 7开始,expr还可以是字符串(String),但是长整型(long)在目前所有的版本中都是不可以的。

[例3-2]:也可以采用switch语句实现,修改后的程序代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class Ex3_2{
public static void main(String[] args) {
int s;
s = Integer.parseInt(JOptionPane.showInputDialog("输入分数:"));
int x = s / 10;
switch (x) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("不及格");
break;
case 6:
System.out.println("及格");
break;
case 7:
System.out.println("中");
break;
case 8:
System.out.println("良");
break;
case 9:
case 10:
System.out.println("优");
}
}
}

说明:这里的关键是通过除10取整,将成绩的判定条件转换为整数值范围的情形,第8~12行所列出的case情形无任何执行语句,所以按执行流程均会执行第14行语句。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!