3.2循环结构

循环结构分两大类,一类是当型,一类是直到型(了解)

当布尔表达式条件为true时,反复执行某语句,当布尔表达式为false时才停止循环。如:while与for循环

直到型

先执行某语句,再判断布尔表达式。如果为true再执行某语句,如此反复,直到布尔表达式条件为false时才停止循环,比如do-while循环

3.2.1while循环

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

语句中应有使循环趋向于结束的语句,否则会出现无限循环-----“死”循环

3.2.2 do-while循环

do-while循环结构会先执行循环体,然后再判断布尔表达式的值,若条件为执行循环体,当条件为循环结束

do-while循环的循环体至少执行一次

while与do-while的区别

3.2.3 for循环

 

for循环语句是支持迭代的一种通用结构,是最有效,最灵活的循环结构。for循环在第一次反复之前要进行初始化,即执行初始表达式;随后;对布尔表达式进行判定,若判定结果为true,则执行循环体,否则,终止循环;最后在每一次反复的时候,进行某种形式的“步进”,即执行迭代因子

  • 初始化部分设置循环变量的初值
  • 条件判断部分为任意布尔表达式
  • 迭代因子控制循环变量的增减
  • for循环在执行条件判定后,先执行的循环体部分,再执行步进

Java里能用到逗号运算符的地方屈指可数,其中一处就是for循环的控制表达式。在控制表达式初始化和步进控制部分,我们可以使用一系列由逗号分隔的表达式,而且那些表达式均会独立执行

逗号运算符

  • 无论在初始化还是步进部分,语句都是顺序执行
  • 尽管初始化部分可以设置任意数量的定义,但都属于同一类型·
  • 约定·:只在for语句的控制表达式中写入循环变量初始化条件判断迭代因子相关的表达式,初始化部分.条件判断部分和迭代因子可以为空语句,但必须以“”分开

无限循环

编译器将while(true)for(;;)看作同一回事,都指的无限循环

在for语句的初始化部分声明的变量,其作用域为整个for循环体,不能在循环外部使用该变量;while循环可以

3.2.4嵌套循环

在一个循环语句内部再嵌套一个或多个循环,称为嵌套循环

3.2.5 break语句和continue语句

在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环不执行循环中剩余的语句

continue语句在循环语句中;用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定

注意事项

  1. continue用在while,do-while中,continue语句立刻跳到循环首部,跳过了当前循环其余部分
  2. continue用在for循环中,跳到for循环的迭代因子部分

3.2.6带标签的break和continue

goto关键字很早就在程序设计语言中出现。尽管go to仍是Java的一个保留字,但并未在Java语言中的到正式使用;Java没有goto语言,然而,在break和continue这两个关键字的身上,我们仍然能能看出一些goto的影子——带标签的break和continue

标签是指后面跟一个冒号的标识符,例如:“label:”。对于java来说唯一用到标签的地方是在循环语句之前。而在循环之前设置标签的唯一理由是:我们希望在其中嵌套另一个循环,由于break和continue关键字通常只终端当前循环,但若随同标签使用,它们就会中断到存在标签的地方

 

在“go to有害”论中,最有问题的就是标签,而非goto,随着标签在一个程序里数量的增多,产生错误的机会也越来越多,但Java标签不会造成这方面的问题,因为他们的活动场所已被限死,不可通过特别的方式到处传递程序的控制权。由此也引出了一个有趣的问题:通过限制语句的能力,反而能使一项语言性更加有用

 

posted @ 2020-08-17 20:31  陪妙妙长大  阅读(234)  评论(0)    收藏  举报