本章开始我们需要学习流程控制语句,流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。控制语句分为三类:顺序、选择和循环。
“顺序结构”代表“先执行a,再执行b”的逻辑。比如,先找个女朋友,再给女朋友打电话;先订婚,再结婚;
“选择结构”代表“如果…,则…”的逻辑。比如,如果女朋友来电,则迅速接电话;如果看到红灯,则停车;
“循环结构”代表“如果…,则再继续…”的逻辑。比如,如果没打通女朋友电话,则再继续打一次; 如果没找到喜欢的人,则再继续找。
前面两章讲解的程序都是顺序结构,,即按照书写顺序执行每一条语句,这并不是我们的重点,因此本章研究的重点是“选择结构”和“循环结构”。
很神奇的是,三种流程控制语句就能表示所有的事情!不信,你可以试试拆分你遇到的各种事情。实际上,任何软件和程序,小到一个练习,大到一个操作系统,本质上都是由“变量、选择语句、循环语句”组成。
这三种基本逻辑结构是相互支撑的,它们共同构成了算法的基本结构,无论怎样复杂的逻辑结构,都可以通过它们来表达。上述两种结构组成的程序可以解决全部的问题,所以任何一种高级语言都具备上述两种结构。
因此,本章是大家真正跨入编程界的“门槛”,是成为“程序猿”的“门票”。
选择结构
if单选择结构
语法结构:
1 | if(布尔表达式){ |
if语句对布尔表达式进行一次判定,若判定为真,则执行{}中的语句块,否则跳过该语句块。
1 | public class Test1 { |
上述代码中的Math.random()是什么意思呢???这句代码的意思就是产生一个[0,1)之间的随机数,包括0不包括1。那么 (6*Math.random())+1 的意思就是产生[0,7)之间的随机数,这个数学问题我就不说了
Math类的使用
- java.lang包中的Math类提供了一些用于数学计算的方法。
- Math.random()该方法用于产生一个0到1区间的double类型的随机数,但是不包括1。int i = (int) (6 * Math.random()); //产生:[0,5]之间的随机整数
if-else双选择结构
语法结构:
1 | if(布尔表达式){ |
当布尔表达式为真时,执行语句块1,否则,执行语句块2。也就是else部分。
if-else结构
1 | public class Test2 { |
if-else if-else多选择结构
语法结构:
1 | if(布尔表达式1) { |
当布尔表达式1为真时,执行语句块1;否则,判断布尔表达式2,当布尔表达式2为真时,执行语句块2;否则,继续判断布尔表达式3······;如果1~n个布尔表达式均判定为假时,则执行语句块n+1,也就是else部分。
if-else if-else多选择结构
1 | public class Test5 { |
switch多选择结构
语法结构:
1 | switch (表达式) { |
switch语句会根据表达式的值从相匹配的case标签处开始执行,一直执行到break语句处或者是switch语句的末尾。如果表达式的值与任一case值不匹配,则进入default语句(如果存在default语句的情况)。
根据表达式值的不同可以执行许多不同的操作。switch语句中case标签在JDK1.5之前必须是整数(long类型除外)或者枚举,不能是字符串,在JDK1.7之后允许使用字符串(String)。
大家要注意,当布尔表达式是等值判断的情况,可以使用if-else if-else多选择结构或者switch结构,如果布尔表达式区间判断的情况,则只能使用if-else if-else多选择结构。
switch结构
1 | public class Test6 { |
注意:switch语句当只有遇到break时才结束,也就是说你没有遇到break就不会结束,继续下面的走
3.2循环结构
因为这个跟c语言中的一样,所以我在这不想再多说了,不过有个新的没见过的我说一下
带标签的break和continue
goto关键字很早就在程序设计语言中出现。尽管goto仍是Java的一个保留字,但并未在Java语言中得到正式使用;Java没有goto语句。然而,在break和continue这两个关键字的身上,我们仍然能看出一些goto的影子—带标签的break和continue。
“标签”是指后面跟一个冒号的标识符,例如:“label:”。对Java来说唯一用到标签的地方是在循环语句之前。而在循环之前设置标签的唯一理由是:我们希望在其中嵌套另一个循环,由于break和continue关键字通常只中断当前循环,但若随同标签使用,它们就会中断到存在标签的地方。
在 “goto有害”论中,最有问题的就是标签,而非goto, 随着标签在一个程序里数量的增多,产生错误的机会也越来越多。 但Java标签不会造成这方面的问题,因为它们的活动场所已被限死,不可通过特别的方式到处传递程序的控制权。由此也引出了一个有趣的问题:通过限制语句的能力,反而能使一项语言特性更加有用。
带标签break和continue:控制嵌套循环跳转(打印101-150之间所有的质数)
1 | /** |