
条件语句可以根据不同的条件执行不同的语句,有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;elsereturn v3;} else {if (v2 >= v3)return v2;elsereturn 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语句在某些特定场景,比如流程的那种应用场景中有很大的优势。
