流程控制-条件语句 - 图1

  条件语句可以根据不同的条件执行不同的语句,有if条件语句和switch多分支语句。

if条件语句

使用格式:

  1. 简单if语句
  1. if (布尔表达式) {
  2. 语句序列
  3. }
  1. if…else语句
  1. if (布尔表达式) {
  2. 语句序列1
  3. }
  4. else {
  5. 语句序列2
  6. }
  1. if…else if语句
  1. if (布尔表达式1) {
  2. 语句序列1
  3. } else if (布尔表达式2) {
  4. 语句序列2
  5. }
  6. else if (布尔表达式n) {
  7. 语句序列n
  8. }
  1. if (布尔表达式1) {
  2. 语句序列1
  3. } else if (布尔表达式2) {
  4. 语句序列2
  5. }
  6. else if (布尔表达式n) {
  7. 语句序列n
  8. } else {
  9. 语句序列n+1
  10. }

注意:

  1. if、else、else if后面的{ }内是其的控制范围,超出这个范围的语句不受他们控制。
  2. 当if、else、else if后面只有一条语句的时候,可以省略{ },没有语句时省略{ }需要加上分号“;”,如 if (i == 20) ;
  3. ?:运算符可以用if…else来表示。

练习

  从控制台输入3个数,输出他们之间的最大值。

  1. static int maxValue(int v1, int v2, int v3) {
  2. if (v1 >= v2) {
  3. if (v1 >= v3)
  4. return v1;
  5. else
  6. return v3;
  7. } else {
  8. if (v2 >= v3)
  9. return v2;
  10. else
  11. return v3;
  12. }
  13. }
  1. static int maxValue(int v1, int v2, int v3) {
  2. if (v1 >= v2 && v1 >= v3) {
  3. return v1;
  4. } else if (v2 >= v3) {
  5. return v2;
  6. } else {
  7. return v3;
  8. }
  9. }
  1. static int maxValue(int v1, int v2, int v3) {
  2. int temp = v1;
  3. if (temp < v2) {
  4. temp = v2;
  5. }
  6. if (temp < v3) {
  7. temp = v3;
  8. }
  9. return temp;
  10. }
  1. static int maxValue(int v1, int v2, int v3) {
  2. int temp = v1 >= v2 ? v1 : v2;
  3. temp = temp >= v3 ? temp : v3;
  4. return temp;
  5. }
  1. public static void main(String[] args) {
  2. //控制台输入
  3. Scanner sc = new Scanner(System.in);
  4. String line = sc.nextLine();
  5. String[] lin = line.split(" ");
  6. int intValue1 = Integer.parseInt(lin[0]);
  7. int intValue2 = Integer.parseInt(lin[1]);
  8. int intValue3 = Integer.parseInt(lin[2]);
  9. System.out.println(maxValue(intValue1, intValue2, intValue3));
  10. }

  上面4种方法的运行都没有问题,推荐使用第3种和第4种方法,引入一个变量temp,简单易读;;第一种方法使用的嵌套结构,在编程中尽量减少嵌套的使用,减少理解难度。

switch多分支条件语句

使用格式:

  1. switch(表达式) {
  2. case 常量值1 :
  3. 语句块1
  4. (break;)
  5. ……
  6. case 常量值n :
  7. 语句块n
  8. (break;)
  9. default:
  10. 语句块 n+1;
  11. (break;)
  12. }

特点:

  1. 在没有break的情况下,从匹配成功的case开始,依次执行之后的每一个语句,包括在匹配成功的case下面的其他case和default;当没有匹配成功时,从default开始执行语句。
  2. 在有break的情况下,从匹配成功的case开始,依次执行至break处停止。

switch表达式支持的数据:

版本 switch支持的表达式类型
Jdk1.5之前 只支持byte short char int四种数据类型
Jdk1.5 新增支持枚举类和byte、short、char、int包装类
Jdk1.7 新增支持String类型

  虽然switch支持的数据类型增多了,但实际上,switch只支持int类型的数据

  1. 支持byte、short、char是因为这三种类型可以自动转换成int类型数据(不损失精度)
  2. 支持包装类是因为Java编译器在底层有一个拆箱过程。
  3. 支持枚举是枚举类是因为枚举类有一个ordinal方法,结果是一个int类型的数值。
  4. 支持String类型是因为String类型有一个hashCode算法,结果也是int类型的数值

  switch的每一个case值必须不同。

  switch语句在某些特定场景,比如流程的那种应用场景中有很大的优势。