Day11-38.Iteration

来源:互联网 发布:c语言是c 的基础吗 编辑:程序博客网 时间:2024/05/21 02:20

迭代

whiledo-whilefor用来控制循环,有时将它们划分为迭代语句(iteration statement)。

语句会重复执行,直到起控制作用的布尔表达式(Booleanexpression)得到“假”的结果为止。

while循环的格式如下:

while(Boolean-expression)

statement

在循环刚开始时,会计算一次布尔表达式的值;而在语句的下一次迭代开始前会再计算一次。

下面这个简单的例子可产生随机数,直到符合特定的条件为止:

//: control/WhileTest.java// Demonstrates the while loop.public class WhileTest {  static boolean condition() {    boolean result = Math.random() < 0.99;    System.out.print(result + ", ");    return result;  }  public static void main(String[] args) {    while(condition())      System.out.println("Inside 'while'");    System.out.println("Exited 'while'");  }} /* (Execute to see output) *///:~



condition()方法用到了Math库里的静态static方法random(),该方法的作用是产生0和1之间(包括0但不包括1)的一个double值。

result的值是通过比较操作符<而得到它,这个操作符将产生boolean类型的结果。

在打印boolean类型的值时,将自动地得到适合的字符串true或false。

while的条件表达式意思是说:“只要condition()返回true,就重复执行循环体中的语句”。



do-while

do-while的格式如下:

do 

statement

while(boolean-expression);

whiledo-while唯一的区别就是do-while中的语句至少会执行一次,即使表达式第一次就被计算为false

而在while循环结构中,如果条件第一次就为false,那么其中的语句根本就不会执行。

在实际应用中,while比do-while更常用一些。


for

for循环可能是最经常使用的迭代形式,这种在第一次迭代之前要进行初始化。

随后,它会进行条件测试,而且在每一次迭代结束时,进行某种形式的“步进”。

for循环的格式如下:

for(initialization;boolean-expression;step)

statement

初始化(initialization)表达式、布尔表达式(Boolean-expression)或者步进(step)运算,

都可以为空。

每次迭代前会测试布尔表达式。

若获得的结果是false,就会执行for语句后面的代码行。

每次循环结束,会执行一次步进。

for循环常用于执行“计数”任务:

//: control/ListCharacters.java// Demonstrates "for" loop by listing// all the lowercase ASCII letters.public class ListCharacters {  public static void main(String[] args) {    for(char c = 0; c < 128; c++)      if(Character.isLowerCase(c))        System.out.println("value: " + (int)c +          " character: " + c);  }} /* Output:value: 97 character: avalue: 98 character: bvalue: 99 character: cvalue: 100 character: dvalue: 101 character: evalue: 102 character: fvalue: 103 character: gvalue: 104 character: hvalue: 105 character: ivalue: 106 character: j...*///:~



注意,变量c是在程序用到它的地方被定义的,也就是在for循环的控制表达式里,

而不是在main()开始的地方定义的,c的作用域就是for控制的表达式的范围内。

这个程序也使用了java.lang.Character包装器类,这个类不但能把char基本类型的值包装进对象,还提供了一些别的有用的方法。

这里用到了static isLowerCase()方法来检查问题中的字符是否为小写字母。

对于像C语言那样的传统的过程型语言,要求所有变量都在一个块的开头定义,以便编译器在创建这个块的时候,可以为那些变量分配空间。

而在Java和C++中,则可在整个块的范围内分散变量声明,在真正需要的地方才加以定义。

这样便可形成更自然的编程风格,也更易理解。


The comma operator 


逗号操作符


本章前面已经提到了逗号操作符(注意不是逗号分隔符,逗号用作分割符时用来分割函数的不同参数),

Java里唯一用到逗号操作符的地方就是for循环的控制表达式。

在控制表达式的初始化和步进控制部分,可以使用一系列由逗号分割的语句;而且那些语句均会独立执行。

通过使用逗号操作符,可以在for语句内定义多个变量,但是它们必须具有相同的类型。

//: control/CommaOperator.javapublic class CommaOperator {  public static void main(String[] args) {    for(int i = 1, j = i + 10; i < 5; i++, j = i * 2) {      System.out.println("i = " + i + " j = " + j);    }  }} /* Output:i = 1 j = 11i = 2 j = 4i = 3 j = 6i = 4 j = 8*///:~


for语句中的int定义涵盖了i和j,在初始化部分实际上可以拥有任意数量的具有相同类型的变量定义。

在一个控制表达式中,定义多个变量的这种能力只限于for循环适用,在其他任何选择或迭代语句中都不能使用这种方式。

可以看到,无论在初始化还是在步进部分,语句都是顺序执行的。

此外,初始化部分可以有任意数量的同一类型的定义。