Skip to content

Commit cc1c0df

Browse files
committed
校订第五章 迭代语句 while
1 parent 4bf30ec commit cc1c0df

File tree

1 file changed

+34
-24
lines changed

1 file changed

+34
-24
lines changed

docs/book/05-Control-Flow.md

Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
> 程序必须在执行过程中控制它的世界并做出选择。 在 Java 中,你需要使用执行控制语句来做出选择。
66
7-
Java 使用了 C 的所有执行控制语句,因此对于熟悉 C/C++ 编程的人来说,这部分内容轻车熟路。 大多数面向过程编程语言都有共通的某种控制语句。在 Java 中,涉及的关键字包括 **if-else,while,do-while,for,return,break** 和选择语句 **switch**然而,Java 并不支持备受诟病的 **goto**尽管它仍然是解决某些特殊问题最有效的方法)。 在 Java 中,我们依然可以进行类似的跳转,但较之典型的 **goto** 更受限制
7+
Java 使用了 C 的所有执行控制语句,因此对于熟悉 C/C++ 编程的人来说,这部分内容轻车熟路。 大多数面向过程编程语言都有共通的某种控制语句。在 Java 中,涉及的关键字包括 **if-else,while,do-while,for,return,break** 和选择语句 **switch**。 Java 并不支持备受诟病的 **goto**尽管它在某些特殊场景中依然是最行之有效的方法)。 尽管如此,在 Java 中我们仍旧可以进行类似的逻辑跳转,但较之典型的 **goto** 用法限制更多
88

99

1010
## true和flase
@@ -84,33 +84,30 @@ public class IfElse {
8484
0
8585
```
8686

87-
<sub>**注解**`else if` 并非是新关键词,它仅是 `else` 后紧跟的一个新的 `if` 语句。</sub>
87+
<sub>**注解**`else if` 并非新关键字,它仅是 `else` 后紧跟的一条新 `if` 语句。</sub>
8888

89-
尽管 Java C/C++ 都属“自由格式”的编程语言,但通常我们会在控制流程语句中采用首尾缩进的规范,以便代码具备更好的可读性
89+
Java C/C++ 同属“自由格式”的编程语言,但通常我们会在 Java 控制流程语句中采用首尾缩进的规范,以便代码更具可读性
9090

9191
<!--Iteration Statements-->
92-
9392
## 迭代语句
9493

95-
循环由 **while****do-while****for** 控制,有时称为迭代语句。 语句会重复执行,直到起控制作用的 **布尔表达式** (Boolean expression)计算为“假”
94+
**while****do-while****for** 用来控制循环语句(有时也称迭代语句)。 只有控制循环的布尔表达式计算结果为 `false`,循环语句才会停止
9695

9796

9897
### while
9998

100-
while循环的形式是
99+
**while** 循环的形式是
101100

102101
```java
103102
while(Boolean-expression)
104103
statement
105104
```
106105

107-
在循环开始时,会计算一次布尔表达式的值,而在语句的每次进一步迭代之前再次计算一次。
108-
109-
下面这个简单的例子将可产生随机数,直到满足特定条件:
106+
执行语句会在每一次循环前,判断布尔表达式返回值是否为 `true`。下例可产生随机数,直到满足特定条件。代码示例:
110107

111108
```java
112109
// control/WhileTest.java
113-
110+
// 演示 while 循环
114111
public class WhileTest {
115112
static boolean condition() {
116113
boolean result = Math.random() < 0.99;
@@ -123,7 +120,11 @@ public class WhileTest {
123120
System.out.println("Exited 'while'");
124121
}
125122
}
126-
/* Output: (First and Last 5 Lines)
123+
```
124+
125+
输出结果:
126+
127+
```
127128
true, Inside 'while'
128129
true, Inside 'while'
129130
true, Inside 'while'
@@ -135,10 +136,15 @@ true, Inside 'while'
135136
true, Inside 'while'
136137
true, Inside 'while'
137138
false, Exited 'while'
138-
*/
139139
```
140140

141-
**condition()** 方法用到了 **Math** 库里的 **static** (静态)方法 **random()**,该方法的作用是产生 0 和 1 之间 (包括 0,但不包括 1) 的一个**double**值。**result** 的值是通过比较操作符<而得到它的,这个操作符产生 **boolean** 类型的结果。在打印 **boolean** 类型的值时,将自动地得到适合的字符串 **true****false**。while 的条件表达式意思是说:“只要 **condition()**返回 **true**,就重复执行循环体中的语句”。
141+
142+
`condition()` 方法使用到了 **Math** 库的**静态**方法 `random()`。该方法的作用是产生 0 和 1 之间 (包括 0,但不包括 1) 的一个 **double** 值。
143+
144+
`result` 的值是通过判断
145+
146+
**result** 的值是通过比较运算符 `<` 来产生的 **boolean** 类型的结果。当控制台输出 **boolean** 型值时,会自动将其转换未对应的文字形式 `true``false`。此处 `while` 条件表达式代表:“仅在 `condition()` 返回 `false` 时停止循环”。
147+
142148

143149
### do-while
144150

@@ -150,20 +156,21 @@ do
150156
while(Boolean-expression);
151157
```
152158

153-
**while****do-while** 之间的唯一区别是 **do-while** 的语句总是至少执行一次,即使表达式第一次计算为 false 也是如此。 在 **while** 循环结构中,如果条件第一次就为 **false**,那么其中的语句根本不会执行。在实际应用中,**while****do-while** 更常用一点。
159+
**while****do-while** 之间的唯一区别是:即使条件表达式返回结果为 `false`**do-while** 语句也至少会执行一次。 在 **while** 循环体中,如布尔表达式首次返回的结果就为 `false`,那么循环体内的语句不会被执行。实际应用中,**while** 形式比 **do-while** 更为常用。
160+
154161

155162
### for
156163

157-
**for** 循环可能是最常用的迭代形式。 该循环在第一次迭代之前执行初始化。 随后,它会执行条件测试,并在每次迭代结束时,进行某种形式的“步进”**for** 循环的形式是:
164+
**for** 循环可能是最常用的迭代形式。 该循环在第一次迭代之前执行初始化。随后,它会执行布尔表达式,并在每次迭代结束时,进行某种形式的步进**for** 循环的形式是:
158165

159166
```java
160167
for(initialization; Boolean-expression; step)
161168
statement
162169
```
163170

164-
初始化 (initialization) 表达式、布尔表达式 (Boolean-expression) ,或者步进 (step) 运算,都可以为空。在每次迭代之前都会测试表达式,并且一旦计算结果为 false,就会在 for 语句后面的行继续执行。 在每个循环结束时,执行一次步进
171+
初始化 (*initialization*) 表达式、布尔表达式 (*Boolean-expression*) ,或者步进 (*step*) 运算,都可以为空。每次迭代之前都会判断布尔表达式的结果是否成立。一旦计算结果为 `false`,则跳出 **for** 循环体并继续执行后面代码。 每次循环结束时,都会执行一次步进
165172

166-
**for**循环通常用于“计数”任务:
173+
**for** 循环通常用于“计数”任务。代码示例
167174

168175
```java
169176
// control/ListCharacters.java
@@ -176,7 +183,11 @@ public class ListCharacters {
176183
" character: " + c);
177184
}
178185
}
179-
/* Output: (First 10 Lines)
186+
```
187+
188+
输出结果(前 10 行):
189+
190+
```
180191
value: 97 character: a
181192
value: 98 character: b
182193
value: 99 character: c
@@ -187,18 +198,17 @@ value: 103 character: g
187198
value: 104 character: h
188199
value: 105 character: i
189200
value: 106 character: j
190-
...
191-
*/
201+
...
192202
```
193203

194-
请注意,变量 **c** 在程序用到它的地方被定义的,也就是在for循环的控制表达式内,而不是在 **main()** 的开头。**c** 的范围是由 **for** 控制的语句。
195204

196-
像C这样的传统过程语言要求在块的开头定义所有变量。 当编译器创建块时,它可以为这些变量分配空间。 在Java和C ++中,您可以在整个块中传播变量声明,并在需要时定义它们。 这允许更自然的编码风格并使代码更容易理解。[1]
205+
**注意**:变量 **c** 是在 **for** 循环执行时才被定义的,并不是在 **main()** 的开头。**c** 的作用域范围仅在 **for** 循环体内。
197206

198-
这个程序也使用了 **java.lang.Character** 包装器类,这个类不但能把 **char** 基本类型的值包装进对象,还提供了一些别的有用的方法。这里用到了 **static isLowerCase()** 方法来检查问题中的字符是否为小写字母
207+
传统的面向过程语言如 C 需要先在代码块(*block*)前定义好所有变量才能够使用。这样编译器才能在创建块时,为这些变量分配内存空间。在 Java 和 C++ 中,我们可以在整个块使用变量声明,并且可以在需要时才定义变量。 这种自然的编码风格使我们的代码更容易被人理解
199208

200-
<!--The Comma Operator-->
209+
上例使用了 **java.lang.Character** 包装类,该类不仅包含了基本类型 `char` 的值,还封装了一些有用的方法。例如这里就用到了静态方法 `isLowerCase()` 来判断字符否为小写。
201210

211+
<!--The Comma Operator-->
202212
#### 逗号操作符
203213

204214
逗号运算符(不是逗号分隔符,逗号作为分隔符用于分隔定义和方法参数)在 Java 中只有一个用法:在**for** 循环的控制表达式中。 在控制表达式的初始化和步进控制中,您可以使用逗号分隔多个语句,并按顺序计算这些语句。使用逗号运算符,您可以在 **for** 语句中定义多个变量,但它们必须属于同一类型:

0 commit comments

Comments
 (0)