条件语句可以根据不同的条件执行不同的语句,有if条件语句和switch多分支语句。
if条件语句
使用格式:
- 简单if语句
if (布尔表达式) {
语句序列
}
- if…else语句
if (布尔表达式) {
语句序列1
}
else {
语句序列2
}
- if…else if语句
if (布尔表达式1) {
语句序列1
} else if (布尔表达式2) {
语句序列2
}
…else if (布尔表达式n) {
语句序列n
}
if (布尔表达式1) {
语句序列1
} else if (布尔表达式2) {
语句序列2
}
…else if (布尔表达式n) {
语句序列n
} else {
语句序列n+1
}
注意:
- if、else、else if后面的{ }内是其的控制范围,超出这个范围的语句不受他们控制。
- 当if、else、else if后面只有一条语句的时候,可以省略{ },没有语句时省略{ }需要加上分号“;”,如
if (i == 20) ;
- ?:运算符可以用if…else来表示。
练习
从控制台输入3个数,输出他们之间的最大值。
static int maxValue(int v1, int v2, int v3) {
if (v1 >= v2) {
if (v1 >= v3)
return v1;
else
return v3;
} else {
if (v2 >= v3)
return v2;
else
return v3;
}
}
static int maxValue(int v1, int v2, int v3) {
if (v1 >= v2 && v1 >= v3) {
return v1;
} else if (v2 >= v3) {
return v2;
} else {
return v3;
}
}
static int maxValue(int v1, int v2, int v3) {
int temp = v1;
if (temp < v2) {
temp = v2;
}
if (temp < v3) {
temp = v3;
}
return temp;
}
static int maxValue(int v1, int v2, int v3) {
int temp = v1 >= v2 ? v1 : v2;
temp = temp >= v3 ? temp : v3;
return temp;
}
public static void main(String[] args) {
//控制台输入
Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
String[] lin = line.split(" ");
int intValue1 = Integer.parseInt(lin[0]);
int intValue2 = Integer.parseInt(lin[1]);
int intValue3 = Integer.parseInt(lin[2]);
System.out.println(maxValue(intValue1, intValue2, intValue3));
}
上面4种方法的运行都没有问题,推荐使用第3种和第4种方法,引入一个变量temp,简单易读;;第一种方法使用的嵌套结构,在编程中尽量减少嵌套的使用,减少理解难度。
switch多分支条件语句
使用格式:
switch(表达式) {
case 常量值1 :
语句块1
(break;)
……
case 常量值n :
语句块n
(break;)
default:
语句块 n+1;
(break;)
}
特点:
- 在没有break的情况下,从匹配成功的case开始,依次执行之后的每一个语句,包括在匹配成功的case下面的其他case和default;当没有匹配成功时,从default开始执行语句。
- 在有break的情况下,从匹配成功的case开始,依次执行至break处停止。
switch表达式支持的数据:
版本 | switch支持的表达式类型 |
---|---|
Jdk1.5之前 | 只支持byte short char int四种数据类型 |
Jdk1.5 | 新增支持枚举类和byte、short、char、int包装类 |
Jdk1.7 | 新增支持String类型 |
虽然switch支持的数据类型增多了,但实际上,switch只支持int类型的数据
- 支持byte、short、char是因为这三种类型可以自动转换成int类型数据(不损失精度)
- 支持包装类是因为Java编译器在底层有一个拆箱过程。
- 支持枚举是枚举类是因为枚举类有一个ordinal方法,结果是一个int类型的数值。
- 支持String类型是因为String类型有一个hashCode算法,结果也是int类型的数值
switch的每一个case值必须不同。
switch语句在某些特定场景,比如流程的那种应用场景中有很大的优势。