5. 循环
循环是用来控制语句块重复执行的一种结构。循环的概念是程序设计的基础。Java 提供了三种类型的循环语句:while 循环、do - while 循环和 for 循环。
5.1 while 循环
while 循环在条件为真的情况下,重复地执行语句。
while 循环的语法如下 :
while( 循环继续条件){
// 循环体
语句 (组);
}
下图给出了 while 循环的流程图。循环中包含的重复执行的语句部分称为循环体(loop body)。循环体的每一次执行都被认为是一次循环的迭代(或重复)。每个循环都含有循环继续条件,循环继续条件是一个布尔表达式,控制循环体的执行。在循环体执行前总是先计算循环条件以决定是否执行它。若条件为 true, 则执行循环体;若条件为 false,则终止整个循环,并且程序控制转移到 while 循环后的下一条语句。
确切地知道循环体需要执行的次数。所以,使用一个控制变量 count 来对执行次数计数。这种类型的循环称为计数器控制的循环(counter - controlled loop)。
注意:循环继续条件应该总是放在圆括号内。只有当循环体只包含一条语句或不包含语句时,循环体的花括号才可以省略。
注意:要保证循环继续条件最终可以变为 false,以便程序能够结束。一个常见的程序设计错误是无限循环(也就是说,循环会永远执行下去)。如果程序运行了不寻常的长时间而不结束,可能其中有无限循环。如果你是从命令窗口运行程序的,按 CTRL+C 键来结束。
警告:程序员经常会犯的错误就是使循环多执行一次或少执行一次。这种情况通常称为差一错误( off - by - one error)。例如:下面的循环会将 Welcome to ]ava 显示 101 次,而不是100 次。这个错误出在条件部分,所以条件应该是 count<100 而不是 count<=100。
int count = 0;
while (count <= 100){
System.out.println("Weicome to Java!");
count++;
}
5.1.1 循环设计策略
编写一个正确的循环对编程新手来说,并不是件容易的事。编写循环时应该考虑如下三个步骤:
第一步:确定需要重复的语句。
第二步:将这些语句放在一个循环中,如下所示:
while(true){
语句组 ;
}
第三步:为循环继续条件编码,并为控制循环添加适合的语句。
while( 循环继续条件){
语句组 ;
用于控制循环的附件语句 ;
}
5.1.2 使用标记值控制循环
另一种控制循环的常用技术是在读取和处理一个集合的值时指派一个特殊值。这个特殊的输人值也称为标记值(sentinel value), 用以表明循环的结束。如果一个循环使用标记值来控制它的执行,它就称为标记位控制的循环(sentinel - controlled loop)。
注意:在循环控制中,不要使用浮点值来比较值是否相等。因为浮点值都是某些值的近似值,使用它们可能导致不精确的循环次数和不准确的结果。
考虑下面计算 1+0.9+0.8+ . . .+0.1的代码:
double item = 1; double sum = 0;
while (item != 0) { // No guarantee item will be 0
sum += item;
item -= 0.1;
}
System.out.println(sum);
变量 item 从1开始,每执行一次循环体就减去 0.1。当 item 变为 0 时循环应该终止。但是,因为浮点數在算术上是近似的,所以不能确保 item 会变成真正的 0。从表面上看,这个循环似乎没问題,但实际上它是一个无限循环。
5.1.3 输入和输出重定向
在前面的例子中,如果要输人大量的数值,那么从键盘上输入是非常繁琐的事。可以将这些数据用空格隔开,保存在一个名为 input.