友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

Java编程思想第4版[中文版](PDF格式)-第54章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




值。可据此改写上面的 test()方法,使其利用这些特点:  



                                                                                  84 


…………………………………………………………Page 86……………………………………………………………

  

static int test2(int testval) {  

  if(testval 》 target)  

    return …1;  

  if(testval 《 target)  

    return +1;  

  return 0; // match  

}  

  

不必加上else,因为方法在遇到 return 后便不再继续。  



3。2。3  反复  



while,do…while 和 for 控制着循环,有时将其划分为“反复语句”。除非用于控制反复的布尔表达式得到 

 “假”的结果,否则语句会重复执行下去。while 循环的格式如下:  

  

while(布尔表达式)  

语句  

  

在循环刚开始时,会计算一次“布尔表达式”的值。而对于后来每一次额外的循环,都会在开始前重新计算 

一次。  

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

  

//: WhileTest。java  

// Demonstrates the while loop  

  

public class WhileTest {  

  public static void main(String'' args) {  

    double r = 0;  

    while(r 《 0。99d) {  

      r = Math。random();  

      System。out。println(r);  

    }  

  }  

} ///:~  

  

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

1)的一个double值。while 的条件表达式意思是说:“一直循环下去,直到数字等于或大于0。99”。由于 

它的随机性,每运行一次这个程序,都会获得大小不同的数字列表。  



3。2。4 dowhile  



do…while 的格式如下:  

  

do  

语句  

while(布尔表达式)  

  

while 和 do…while 唯一的区别就是do…while 肯定会至少执行一次;也就是说,至少会将其中的语句“过一 

遍”——即便表达式第一次便计算为false。而在while 循环结构中,若条件第一次就为false,那么其中的 

语句根本不会执行。在实际应用中,while 比do…while 更常用一些。  



                                                                                           85 


…………………………………………………………Page 87……………………………………………………………

3。2。5 for  



for 循环在第一次反复之前要进行初始化。随后,它会进行条件测试,而且在每一次反复的时候,进行某种 

形式的“步进”(Stepping )。for 循环的形式如下:  

  

for(初始表达式 ; 布尔表达式 ; 步进)  

语句  

  

无论初始表达式,布尔表达式,还是步进,都可以置空。每次反复前,都要测试一下布尔表达式。若获得的 

结果是 false,就会继续执行紧跟在 for 语句后面的那行代码。在每次循环的末尾,会计算一次步进。  

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

  

//: ListCharacters。java  

// Demonstrates 〃for〃 loop by listing  

// all the ASCII characters。  

  

public class ListCharacters {  

  public static void main(String'' args) {  

  for( char c = 0; c 《 128; c++)  

    if (c != 26 )  // ANSI Clear screen  

      System。out。println(  

        〃value: 〃 + (int)c +  

        〃 character: 〃 + c);  

  }  

} ///:~  

  

注意变量c 是在需要用到它的时候定义的——在 for 循环的控制表达式内部,而非在由起始花括号标记的代 

码块的最开头。c 的作用域是由for 控制的表达式。  

以于象C 这样传统的程序化语言,要求所有变量都在一个块的开头定义。所以在编译器创建一个块的时候, 

它可以为那些变量分配空间。而在 Java 和C++中,则可在整个块的范围内分散变量声明,在真正需要的地方 

才加以定义。这样便可形成更自然的编码风格,也更易理解。  

可在for 语句里定义多个变量,但它们必须具有同样的类型:  

  

for(int i = 0; j = 1;  

    i 《 10 && j != 11;  

    i++; j++)  

 /* body of for loop */;  

  

其中,for 语句内的 int定义同时覆盖了 i 和 j。只有 for 循环才具备在控制表达式里定义变量的能力。对于 

其他任何条件或循环语句,都不可采用这种方法。  

  

1。 逗号运算符  

早在第 1 章,我们已提到了逗号运算符——注意不是逗号分隔符;后者用于分隔函数的不同自变量。Java 里 

唯一用到逗号运算符的地方就是for 循环的控制表达式。在控制表达式的初始化和步进控制部分,我们可使 

用一系列由逗号分隔的语句。而且那些语句均会独立执行。前面的例子已运用了这种能力,下面则是另一个 

例子:  

  

//: maOperator。java  

  

public class maOperator {   

  public static void main(String'' args) {  

    for(int i = 1; j = i + 10; i 《 5;  

        i++; j = i * 2) {  



                                                                                         86 


…………………………………………………………Page 88……………………………………………………………

      System。out。println(〃i= 〃 + i + 〃 j= 〃 + j);  

    }  

  }  

} ///:~  

  

输出如下:  

  

i= 1 j= 11  

i= 2 j= 4  

i= 3 j= 6  

i= 4 j= 8  

  

大家可以看到,无论在初始化还是在步进部分,语句都是顺序执行的。此外,尽管初始化部分可设置任意数 

量的定义,但都属于同一类型。  



3。2。6  中断和继续  



在任何循环语句的主体部分,亦可用break 和 continue 控制循环的流程。其中,break 用于强行退出循环, 

不执行循环中剩余的语句。而 continue 则停止执行当前的反复,然后退回循环起始和,开始新的反复。  

下面这个程序向大家展示了break 和 continue 在 for 和 while 循环中的例子:  

  

//: BreakAndContinue。java  

// Demonstrates break and continue keywords  

  

public class BreakAndContinue {  

  public static void main(String'' args) {  

    for(int i = 0; i 《 100; i++) {  

      if(i == 74) break; // Out of for loop  

      if(i % 9 != 0) continue; // Next iteration  

      System。out。print ln(i);  

    }  

    int i = 0;  

    // An 〃infinite loop〃:  

    while(true) {  

      i++;  

      int j = i * 27;  

      if(j == 1269) break; // Out of loop  

      if(i % 10 != 0) continue; // Top of loop  

      System。out。println(i);  

    }  

  }  

} ///:~  

  

在这个 for 循环中,i 的值永远不会到达 100。因为一旦 i到达74,break 语句就会中断循环。通常,只有在 

不知道中断条件何时满足时,才需象这样使用 break。只要 i 不能被 9 整除,continue 语句会使程序流程返 

回循环的最开头执行(所以使i 值递增)。如果能够整除,则将值显示出来。  

第二部分向大家揭示了一个“无限循环”的情况。然而,循环内部有一个 break 语句,可中止循环。除此以 

外,大家还会看到 continue 移回循环顶部,同时不完成剩余的内容(所以只有在 i 值能被 9 整除时才打印出 

值)。输出结果如下:  

  

0  

9  

18  



                                                                                                87 


…………………………………………………………Page 89……………………………………………………………
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!