# 第 9 单元：循环

## 单元目标

• 了解循环的用途
• `for``while``do`...`while` 语句使用正确的语法
• 了解如何打破循环，或者跳过循环迭代并继续

## 什么是循环？

3 种循环结构使迭代代码或多次执行它成为可能：

• `for` 循环
• `while` 循环
• `do`...`while` 循环

### for 循环

Java 语言中基本的循环结构是 `for` 语句。可以使用 `for` 语句迭代一个值范围，以确定执行循环多少次。`for` 循环的抽象语法是：

```for (initialization; loopWhileTrue; executeAtBottomOfEachLoop) {
statementsToExecute
}```

##### 清单 1. 一个 `for` 循环
```public static void main(String[] args) {
Logger l = Logger.getLogger(Person.class.getName());
for (int aa = 0; aa < 3; aa++) {
Person p = new Person("Joe Q Author", 42, 173, 82, "Brown", "MALE");
l.info("Loop executing iteration# " + aa);
l.info("Name: " + p.getName());
l.info("Age:" + p.getAge());
l.info("Height (cm):" + p.getHeight());
l.info("Weight (kg):" + p.getWeight());
l.info("Eye Color:" + p.getEyeColor());
l.info("Gender:" + p.getGender());
}
}```

### 一个 while 循环

`while` 循环的语法是：

```while (condition) {
statementsToExecute
}```

##### 清单 2. 一个 `while` 循环
```public static void main(String[] args) {
Logger l = Logger.getLogger(Person.class.getName());
int aa = 0;
while (aa < 3) {
Person p = new Person("Joe Q Author", 42, 173, 82, "Brown", "MALE");
l.info("Loop executing iteration# " + aa);
l.info("Name: " + p.getName());
l.info("Age:" + p.getAge());
l.info("Height (cm):" + p.getHeight());
l.info("Weight (kg):" + p.getWeight());
l.info("Eye Color:" + p.getEyeColor());
l.info("Gender:" + p.getGender());
aa++;
}
}```

### do...while 循环

##### 清单 3. 一个 `do...while` 循环
```int aa = 0;
do {
Person p = new Person("Joe Q Author", 42, 173, 82, "Brown", "MALE");
l.info("Loop executing iteration# " + aa);
l.info("Name: " + p.getName());
l.info("Age:" + p.getAge());
l.info("Height (cm):" + p.getHeight());
l.info("Weight (kg):" + p.getWeight());
l.info("Eye Color:" + p.getEyeColor());
l.info("Gender:" + p.getGender());
aa++;
} while (aa < 3);```

## 循环终止

##### 清单 4. 一条 `break` 语句
```public static void main(String[] args) {
Logger l = Logger.getLogger(Person.class.getName());
int aa = 0;
while (aa < 3) {
if (aa == 1)
break;
Person p = new Person("Joe Q Author", 42, 173, 82, "Brown", "MALE");
l.info("Loop executing iteration# " + aa);
l.info("Name: " + p.getName());
l.info("Age:" + p.getAge());
l.info("Height (cm):" + p.getHeight());
l.info("Weight (kg):" + p.getWeight());
l.info("Eye Color:" + p.getEyeColor());
l.info("Gender:" + p.getGender());
aa++;
}
}```

`break` 语句跳转到它所在循环外的下一条可执行语句。

## 继续执行循环

##### 清单 5. 一条 `continue` 语句
```public static void main(String[] args) {
Logger l = Logger.getLogger(Person.class.getName());
int aa = 0;
while (aa < 3) {
if (aa == 1)
continue;
else
aa++;
Person p = new Person("Joe Q Author", 42, 173, 82, "Brown", "MALE");
l.info("Loop executing iteration# " + aa);
l.info("Name: " + p.getName());
l.info("Age:" + p.getAge());
l.info("Height (cm):" + p.getHeight());
l.info("Weight (kg):" + p.getWeight());
l.info("Eye Color:" + p.getEyeColor());
l.info("Gender:" +
p.getGender());
}
}```

## 测试您的理解情况

1. 第 7 单元 中，在 `getName()` 实现中使用 `concat()` 方法演示了方法链。使用字符串串联（通过 `+` 运算符）实现 `getName()` 方法。编写一个 JUnit 测试来确保结果符合预期。
2. 哪个（哪些）运算符是二元运算符？
1. `++`
2. `+`
3. `%`
4. `--`
5. `+=`
6. a、b 和 d
7. b、c 和 e
8. 上述选项都不是
3. 字符串串联 表示组合两个或更多字符串的内容形成一个更大的字符串。
4. 以下哪个语句表示 “如果 a 小于或等于 b”？
1. `if (a lt b)`
2. `if (b < a)`
3. `if (b +< a)`
4. `if (a <= b)`
5. 上述选项都不是
5. 执行以下代码块后，变量 `c` 的值是多少？解释您的答案。

```   public int method1() {
int a = 10;
int b = 7;
int c = 0;

if (b >= a)
c++;
b = -47;
if (b > c)
c = b;

return c;
}```
6. 以下代码是否会被编译？解释您的答案。

```   public int method2() {
int a = 0;

if (a > 0) {
int b = a;
}

int c = b;

return c;
}```
7. 执行以下代码块后，变量 `c` 的值是多少？解释您的答案。

```   public boolean method3() {
boolean a = true;
boolean b = false;
boolean c;

if (a = b)
c = false;
else
c = a;

return c;
}```
8. `for` 循环始终 至少执行一次。
9. 在循环的底部检查确定 `do...while` 循环是否继续执行的条件。
10. 编写一个包含 `for` 循环的方法，该循环从 3 开始，循环 6 次，并使用 JDK `Logger` 输出迭代次数（从 1 开始）及当前循环变量。使用 清单 1 作为使用 `Logger` 的示例。使用您的 `Logger` 输出验证结果。
11. 使用不同的方法名重复问题 10 中的练习，但这次使用一个 `while` 循环。使用您的 `Logger` 输出验证结果。
12. 使用 `do...while` 循环重复问题 10 中的练习。使用您的 `Logger` 输出验证结果。
13. 编写一个包含 `for` 循环的方法，该循环从零 (0) 开始，循环十 (10) 次，并使用 JDK `Logger` 类输出迭代次数（从 1 开始）及当前循环变量。跳过第 4、5 和 9 次迭代。使用您的 `Logger` 输出验证结果。

## 进一步探索

Java 教程：while 和 do-while 语句

Java 教程：for 语句

Java— 循环控制

#### 评论

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Java technology
ArticleID=1038562
ArticleTitle=第 9 单元：循环
publish-date=10172016