十二、流程控制-循环

——————————————————————————————————————————————————

1.while循环语句★

while语句也称条件判断语句,它的循环方式是利用一个条件来控制是否要继续反复执行这个语句。语法如下:

   while(条件表达式){
           语句序列
    }

当条件表达式的返回值为真时,则执行“{}”中的语句,当执行完“{}”中的语句后,重新判断条件表达式的返回值,直到表达式返回的结果为假时,退出循环。

在这里插入图片描述

例:计算1-1000的相加结果。

创建GetSum类,在主方法中通过while循环计算1~1000相加的和并输出最终的相加结果。

在这里插入图片描述

在这里插入图片描述

注意:初学者经常犯的错误就是在while表达式括号后加;
while(x == 5);
System.out.println(“x的值为5”);

这时程序会认为要执行一条空语句,而进入无限循环,java编译器又不会报错,这样会浪费很多调试时间。

——————————————————————————————————————————————————

2.do…while语句★

do…while循环语句与while循环语句类似,它们之间的区别是,while语句先判断条件是否成立再执行循环体,而do…while循环语句则先执行一次循环后,再判断条件是否成立。也就是说,do…while循环语句“{}”中的程序段至少要被执行一次。语法如下:

   do {
         语句序列
   }while(条件表达式);

do…while语句与while语句的一个明显区别是,do…while语句在结尾处多了一个分号。

例:使用do…while语句进行用户登录验证。

创建LoginService类,首先提示用户输入6位密码,然后使用Scanner扫描器类获取用户输入的密码,最后进入do…while语句中进行循环,以判断用户输入的密码是否正确,如果用户输入的密码不是“931567”,则让用户反复输入,直到输入正确的密码。

在这里插入图片描述
首先执行do{}里面的语句,在进行条件判断,成立的话就执行循环。

在这里插入图片描述

——————————————————————————————————————————————————

3.for循环语句★

for循环是Java程序设计中最有用的循环语句之一。一个for循环可以用来重复执行某条语句,直到某个条件得到满足。for循环有两种语句,一种是传统的for语句,另一种是foreach语句。

——————————————————————————————————————————————————

3.1.传统for语句

传统的for语句中有3个表达式,其语法如下:

   for (表达式1;表达式2;表达式3) {
             语句序列
   }

表达式1:初始化表达式,负责完成变量的初始化。

表达式2:它是循环条件表达式,该表达式的值为boolean型,该值指定循环条件。等同于while循环里的表达式。

表达式3:每次循环结束后执行的语句,通常用来改变循环条件。

在执行for循环时,首先执行表达式1,完成某一变量的初始化工作;下一步判断表达式2的值,若表达式2的值为true,则进入循环体;在执行完循环体后紧接着计算表达式3,这部分通常是增加或减少循环控制变量的一个表达式。这样一轮循环就结束了。第二轮循环从计算表达式2开始,若表达式2返回true,则继续循环,否则跳出整个for语句。

在这里插入图片描述

例:使用for循环,计算2~~100的所有偶数之和。

创建Circulate类,编写程序,使用for循环语句计算2~100的所有偶数的和并输出相加后的结果。

在这里插入图片描述

在这里插入图片描述

——————————————————————————————————————————————————

3.2.foreach语句

oreach语句是for语句的特殊简化版本,不能完全取代for语句,但任何foreach语句都可以被改写为for语句版本。foreach并不是一个关键字,习惯上将这种特殊的for语句格式称为foreach语句。foreach语句在遍历数组等方面为程序员提供了很大的方便。

   for (元素类型 x:遍历对象obj) {
             引用了x的java语句;
      }

对于foreach语句中的元素变量x,不必对其进行初始化。

例:使用foreach语句遍历整型数组。

创建类Repetition,在主方法中定义一维数组,并用foreach语句遍历该数组。

在这里插入图片描述

在这里插入图片描述

——————————————————————————————————————————————————

4.循环嵌套★

循环有3种,即while、do…while和for,这3种循环可以相互嵌套。

例如,在for循环中套用for循环的代码如下:

   for (....){
            for(...)}
            .....
       }
 }

在while循环中套用while循环的代码如下:

   while (....){
            while(...)}
            .....
       }
 }

在while循环中套用for循环的代码如下:

   while (....){
            for(...)}
            .....
       }
 }

例:使用嵌套for循环输出乘法口诀表。

创建Multiplication类,使用嵌套for循环实现在控制台上输出乘法口诀表。

在这里插入图片描述

在这里插入图片描述

这个结果是如何得出来?,最外层的循环负责控制输出的行数,i从1到9。当i=1时,输出第一行,然后进入内层循环,这里的j是循环变量,循环的次数与i的值相同,所以使用"j < i + 1"来控制,内层循环的次数决定本行有几列,所以先输出j的值,然后在输出*号,在输出i的值,最后输出j的结果。内层循环执行完毕,输出换行,开始下一行的循环。

System.out.print 与 System.out.println 都用来打印内容到控制台。区别:

System.out.print 打印完不换行。(参数)参数不能为空,必须有。在print(“\n”)可以达到和println一样的效果。
System.out.println 打印完会多追加一个换行符。(可以不写参数)

详细过程如下:

当程序遇到嵌套循环体,如果外层循环的循环条件允许,则开始执行外层循环的循环体,而内层循环将被外层循环体来执行,只是内层循环体需要反复执行自己的循环体。当内层循环体执行结束,则再次计算外层循环体的循环条件,决定是否再次执行外层循环体。

外层循环体:for (i = 1 ; i < 10; i++)
初始变量i=1,当i<10的时候执行代码块,执行后i自增。
内层循环体:for (j = 1; j < i + 1 ; j++)
初始变量j=1,当j<i+1的时候执行代码块,执行后j自增。

1、外层循环体,i=1,1<10,条件成立,执行内层循环,j=1,j<i+1,条件成立,输出(j + “*” + i)1×1=1。(条件满足时,内层循环会反复执行)。输出后J自增,J=2。判断j<i+1,条件不成立,退回外层循环体。

2、外层循环执行后,i自增,i=2,i<10,条件成立,执行内层循环。J=1,J<i+1,条件成立,输出(j + " * " + i)1×2=2。*输出后J自增,J=2,判断J<i+1,条件成立,输出(j + " * " + i)2×2=4。输出后J自增,J=3,判断J<i+1,条件不成立,退回外层循环体。

3、外层循环体执行后,i自增,i=3,i<10,条件成立,执行内层循环,j=1,J<i+1,条件成立,输出(j + " * " + i)1×3=3。输出后J自增,J=2,判断J<i+1,条件成立,输出(j + " * " + i)2×3=6。输出后J自增,J=3,判断j<i+1,条件成立,输出(j + “*” + i)3×3=9,输出后J自增,J=4,判断j<i+1,条件不成立,退回外层循环体。

依次类推…

输出格式:
1 * 1=1 (退回外层循环,回车)
1 * 2=2 (\t) 2 * 2=4(\t) (退回外层循环,回车)
1 * 3=3 (\t) 2 * 3=6(\t) 3 * 3=9(\t) (退回外层循环,回车)
依次类推…

——————————————————————————————————————————————————

训练一:细胞分裂实验

生物实验室做单细胞细菌繁殖实验,每一代细菌数量都会成倍数增长,一代菌落中只有一个细菌,二代菌落中的细胞经分裂变成两个细菌,三代菌落中的细胞经分裂变成4个细菌,以此类推,请计算第十代菌落中的细菌数量。

思路:一代~~10代,定义个变量int a = 1,循环条件:a <=10 , 从1代循环到10代。 使用while循环,以一个条件来反复判断。

在定义b菌落的值 int b = 1,每循环依次菌落就翻倍。

在这里插入图片描述

——————————————————————————————————————————————————

训练二:斐波那契数列

1, 1, 2, 3, 5, 8, 13, 21, 34, …是一组典型的斐波那契数列,前两个数相加等于第三个数。那么请问这组数中的第n个数的值是多少?

先要搞清楚这个斐波那契数列是什么东西?

斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……其规律很明显,从第3个数开始,每个数都等于它前两个数的和。

确定了第一个数和第二个数都是1,从第三个数开始循环,进行前两个数相加求和,每次相加之后更新a和b,得出c。

在这里插入图片描述

——————————————————————————————————————————————————

5.循环控制★

循环控制包含两方面的内容,一方面是控制循环变量的变化方式,另一方面是控制循环的跳转。

控制循环的跳转需要使用break和continue两个关键字,这两条跳转语句的跳转效果不同,break语句是中断循环,continue语句是执行下一次循环。

——————————————————————————————————————————————————

5.1.break语句★

使用break语句可以跳出switch结构。在循环结构中,同样也可用break语句跳出当前循环体,从而中断当前循环。

例:输出1~20出现的第一个偶数

创建BreakTest类,循环输出1~20的偶数值,在遇到第一个偶数时,使用break语句结束循环。

在这里插入图片描述

在这里插入图片描述

在循环嵌套情况下,break语句将只会使程序流程跳出包含它的最内层的循环结构,即只跳出一层循环。

如果想让break跳出外层循环,Java提供了“标签”的功能,语法如下:

   标签名:循环体{
              break标签名;
   }

标签名:任意标识符。
循环体:任意循环语句。
break标签名:break跳出指定的循环体,此循环体的标签名必须与break的标签名一致。

带有标签的break可以指定跳出的循环,这个循环可以是内层循环,也可以是外层循环。

例:使用标签让break结束外层循环

创建BreakInsideNested类,在该类中写两层for循环,第一层for语句循环3次,第二层for语句循环5次。当第二层for语句循环至第4次时,强行用break中断循环。输出程序执行时外层循环和内层循环各循环了多少次。

在这里插入图片描述

在这里插入图片描述

从这个运行结果中可以看到以下内容。

循环中的if语句判断:当b等于4时,执行break语句,中断了内层的循环,所以输出的b值最大到3为止。

外层的循环没有受任何影响,输出的i值最大为3,正是for循环设定的最大值。

——————————————————————————————————————————————————

5.2.标签★

现在修改这段代码,给外层循环添加一个名为Loop的标签,让内层循环结束外层循环,再查看运行结果。

在这里插入图片描述

在这里插入图片描述

从这个结果中可以看出,当b的值等于4时,直接结束外层循环,a的值不再增加。

——————————————————————————————————————————————————

6.continue语句★

continue语句是针对break语句的补充。continue不是立即跳出循环体,而是跳过本次循环,回到循环的条件测试部分,重新开始执行循环。

在for循环语句中遇到continue后,首先执行循环的增量部分,然后进行条件测试。在while和do…while循环中,continue语句使控制直接回到条件测试部分。

例:输出1~20的奇数

创建ContinueTest类,编写一个for循环从1循环至20,如果当前循环的次数为偶数,则使用continue语句跳过循环。

在这里插入图片描述

在这里插入图片描述

与break语句一样,continue也支持标签功能,语法如下:

   标签名:循环体{
              continue标签名;
   }

——————————————————————————————————————————————————

训练三:蜗牛爬井

有一口井,深10米,一只蜗牛从井底向井口爬,白天向上爬2米,晚上向下滑1米,问多少天可以爬到井口?

定义长度变量和天数的变量。

int a = 0;
int day = 1;

循环 while判断,为真
a = a + 2, 长度加2米(白天)。
if判断,如果2米大于等于10,a >=10,那么中断。

a长度减去1,
日期+1。

——————————————————————————————————————————————————

训练四:剧院售票

某剧院发售演出门票,演播厅观众席有4行,每行有10个座位。为了不影响观众视角,在发售门票时,屏蔽掉最左一列和最右一列的座位。请编写程序,结合本节知识点模拟整个售票过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值