跳转到内容

条件语句块

100% developed
来自 Wikibooks,开放世界开放书籍

导航 语言基础 主题:v  d  e )


条件语句块允许程序根据某些条件选择不同的执行路径。它们允许程序执行一个测试,然后根据测试结果采取行动。在代码部分中,实际执行的代码行将被突出显示。

如果

[edit | edit source]

if 代码块仅在与之关联的布尔表达式为真时才执行。if 代码块的结构如下所示

if (boolean expression1) {
statement1
statement2
...
statementn

}

以下是一个双重示例,说明如果条件为真和条件为假时会发生什么

Example 代码部分 3.22:两个 if 代码块。
int age = 6;
System.out.println("Hello!");

if (age < 13) {
  System.out.println("I'm a child.");
}

if (age > 20) {
  System.out.println("I'm an adult.");
}

System.out.println("Bye!");
Computer code 代码部分 3.22 的输出
Hello!
I'm a child
Bye!
Note 如果 if 代码块之后只执行一条语句,则无需将其括在花括号中。例如,if (i == 0) i = 1; 是 Java 代码的有效部分。这适用于大多数控制结构,例如 elsewhile。但是,Oracle 的 Java 代码约定 明确规定应始终使用花括号。

If/else

[edit | edit source]

if 代码块可以可选地后接一个 else 代码块,该代码块将在该布尔表达式为假时执行。if 代码块的结构如下所示

if (boolean expression1) {
statement1
statement2
...
statementn

} else {

statement1bis
statement2bis
...
statementnbis

}


If/else-if/else

[edit | edit source]

当需要检查多个条件时,可以使用 else-if 代码块。else-if 语句位于 if 代码块之后,但在 else 代码块之前。if 代码块的结构如下所示

if (boolean expression1) {
statement1.1
statement1.2
...
statementn

} else if (boolean expression2) {

statement2.1
statement2.2
...
statement2.n

} else {

statement3.1
statement3.2
...
statement3.n

}

以下是一个说明示例

Computer code 代码清单 3.3:MyConditionalProgram.java
public class MyConditionalProgram {
    public static void main (String[] args) {
      int a = 5;
      if (a > 0) {
          // a is greater than 0, so this statement will execute
          System.out.println("a is positive");
      } else if (a >= 0) {
          // a case has already executed, so this statement will NOT execute
          System.out.println("a is positive or zero");
      } else {
          // a case has already executed, so this statement will NOT execute
          System.out.println("a is negative");
      }
    }
}
Computer code 代码清单 3.3 的输出
a is positive

请记住,只执行一个代码块,它将是第一个为真的条件。

当遇到 if 时,会评估所有条件,无论条件的结果如何,在执行 if 代码块之后。

Example 代码部分 3.23:变量 a 的新值。
int a = 5;
if (a > 0) {
    // a is greater than 0, so this statement will execute
    System.out.println("a is positive");
    a = -5;
} else if (a < 0) {
    // a WAS greater than 0, so this statement will not execute
    System.out.println("a is negative");
} else {
    // a does not equal 0, so this statement will not execute
    System.out.println("a is zero");
}
Computer code 代码部分 3.23 的输出
a is positive

条件表达式

[edit | edit source]

条件表达式使用复合 ?: 运算符。语法

boolean expression1 ? expression1 : expression2

这将评估 boolean expression1,如果它为 true,则条件表达式将具有 expression1 的值;否则,条件表达式将具有 expression2 的值。

示例

Example 代码部分 3.24:条件表达式。
String answer = (p < 0.05)? "reject" : "keep";

这等效于以下代码片段

Example 代码部分 3.25:等效代码。
String answer;
if (p < 0.05) {
    answer = "reject";
} else {
    answer = "keep";
}

Switch

[edit | edit source]

switch 条件语句基本上是编写许多 if...else 语句的简写版本。switch 代码块评估一个 charbyteshortint(或 enum,从 J2SE 5.0 开始;或 String,从 J2SE 7.0 开始),并根据提供的值,跳转到 switch 代码块中的特定 case 并执行代码,直到遇到 break 命令或代码块结束。如果 switch 值与任何 case 值都不匹配,则执行将跳转到可选的 default case。

switch 语句的结构如下所示

switch (int1 或 char1 或 short1 或 byte1 或 enum1 或 String value1) {
case case value1
statement1.1
...
statement1.n
break;
case case value2
statement2.1
...
statement2.n
break;
default
statementn.1
...
statementn.n

}

以下是一个说明示例

Example 代码部分 3.26:一个 switch 代码块。
int i = 3;
switch(i) {
    case 1:
        // i doesn't equal 1, so this code won't execute
        System.out.println("i equals 1");
        break;
    case 2:
        // i doesn't equal 2, so this code won't execute
        System.out.println("i equals 2");
        break;
    default:
        // i has not been handled so far, so this code will execute
        System.out.println("i equals something other than 1 or 2");
}
Computer code 代码部分 3.26 的输出
i equals something other than 1 or 2

如果 case 没有以 break 语句结尾,则将检查下一个 case,否则执行将跳转到 switch 语句的末尾。

查看此示例以了解如何执行

Example 代码部分 3.27:一个包含没有 breakcaseswitch 代码块。
int i = -1;
switch(i) {
    case -1:
    case 1:
        // i is -1, so it will fall through to this case and execute this code
        System.out.println("i is 1 or -1");
        break;
    case 0:
        // The break command is used before this case, so if i is 1 or -1, this will not execute
        System.out.println("i is 0");
}
Computer code 代码部分 3.27 的输出
i is 1 or -1

从 J2SE 5.0 开始,switch 语句也可以与 enum 值一起使用,而不是整数。

尽管尚未介绍 enums,但这里有一个示例,以便您可以了解如何执行(请注意,case 中的 enum 常量不需要用类型限定

Example 代码部分 3.28:一个带有 enum 类型的 switch 代码块。
Day day = Day.MONDAY; // Day is a fictional enum type containing the days of the week
switch(day) {
    case MONDAY:
        // Since day == Day.MONDAY, this statement will execute
        System.out.println("Mondays are the worst!");
        break;
    case TUESDAY:
    case WEDNESDAY:
    case THURSDAY:
        System.out.println("Weekdays are so-so.");
        break;
    case FRIDAY:
    case SATURDAY:
    case SUNDAY:
        System.out.println("Weekends are the best!");
        break;
}
Computer code 代码部分 3.28 的输出
Mondays are the worst!

从 J2SE 7.0 开始,switch 语句也可以与 String 值一起使用,而不是整数。

Example 代码部分 3.29:一个带有 String 类型的 switch 代码块。
String day = "Monday";
switch(day) {
    case "Monday":
        // Since day == "Monday", this statement will execute
        System.out.println("Mondays are the worst!");
        break;
    case "Tuesday":
    case "Wednesday":
    case "Thursday":
        System.out.println("Weekdays are so-so.");
        break;
    case "Friday":
    case "Saturday":
    case "Sunday":
        System.out.println("Weekends are the best!");
        break;
    default:
        throw new IllegalArgumentException("Invalid day of the week: " + day);
}
Computer code 代码部分 3.29 的输出
Mondays are the worst!


华夏公益教科书