MENU

Java-11 循环结构

August 13, 2023 • Read: 81 • Java阅读设置

Java基本语法

循环结构

  • 循环结构,是能够在某种条件下,循环执行一段代码的结构。

    • 这种结构能够实现代码的循环执行,也就是反复执行。
    • 这种循环性是由某种条件来控制的。
  • 这里的循环,是指一段代码执行后又能再次执行,也就是说一段代码执行完后,接下来执行的代码仍然是这段代码。
  • 循环结构本质上是,使一段代码只要执行完就会检查一个条件,不满足这个条件就不会执行这段代码,满足则会执行这段代码,这就实现了一段代码反复执行的执行线路。这段代码执行时会变动一个信息,该信息能够控制检查条件是否被满足,这就实现代码在某种条件下的反复执行。
  • 循环结构的四大要素

    1. 初始化条件:理解为循环控制信息,初始化循环控制信息的部分。循环控制信息的变动能够控制是否继续循环。
    2. 循环条件:理解为将循环控制信息包装为一个条件表达式,值为boolean型,以实现变动控制信息通过循环条件来控制是否继续循环。
    3. 循环体:反复执行的一段代码。
    4. 迭代部分:变动循环控制信息的部分。
  • 两种循环结构,如下:

    • 循环结构一:执行流程为1->2->3->4->2->3->...->2
      2023-08-13T08:19:39.png
    • 循环结构二:执行流程为1->3->4->2->3->4->...->2
      2023-08-14T02:36:34.png
  • Java中的循环结构:for循环while循环do-while循环

for循环

  • for循环结构属于循环结构一,即循环体初始时就由循环条件控制着。
  • for循环结构:其中1, 2, 3, 4分别对应循环结构4要素,执行流程按照循环结构一的执行流程走。
    2023-08-13T08:22:16.png
  • note:

    • 对于一个要实现的循环问题,要知道虽然是循环,但每一次仍然是循环体执行一次,只不过是通过执行多次循环体实现循环,因此循环体中主要解决的是执行一次的循环体是什么。
    • for循环中的逗号:可以在初始化条件迭代部分两部分使用逗号来分隔多个语句,但要注意,通常在初始化条件中会写int i = 10, j = 20这样是没问题的,不能这样int i = 10, System.out.println("xx"),这会报错,因为这段代码相当于把输出语句声明为int。总之,逗号分隔容易出错,具体也没搜到。因此,慎用。
    • for循环中声明的变量的作用域就是这个for循环的范围,出了循环,则就相当于没有这个变量了。
    • for循环中1, 2, 4要素,即小括号()中代表控制的三部分可以为空,如果为空,正常执行,初始条件和迭代部分为空表示没有代码需要执行,循环条件为空表示没有条件,即无条件执行3代表的循环体。
  • 练习题:

    • 第一题:对应note 1。
      2023-08-13T08:34:31.png
      2023-08-13T08:35:21.png
      2023-08-13T08:35:42.png
    • 第二题:
      2023-08-13T08:38:04.png
      2023-08-13T08:38:34.png
    • 第三题:
      2023-08-13T08:39:03.png
      2023-08-13T08:39:47.png
    • 第四题:
      2023-08-13T08:40:09.png
      2023-08-13T08:40:40.png
    • 第五题:
      2023-08-13T08:41:01.png
      2023-08-13T08:41:41.png

while循环

  • while循环属于循环结构一,即循环体初始时就由循环条件控制着。
  • while循环:其中1, 2, 3, 4分别对应循环结构4要素,执行流程按照循环结构一的执行流程走。
    2023-08-14T06:47:23.png

do-while循环

  • do-while循环属于循环结构二,即循环体初始时没有被循环条件控制着,循环体至少会被执行一次,循环控制信息至少会变动一次。
  • do-while循环:其中1, 2, 3, 4分别对应循环结构4要素,执行流程按照循环结构二的执行流程走。
    2023-08-14T07:00:02.png
  • do-while循环与for循环和while循环,只有在循环条件初始时已经不满足时才有区别,其他时候都没有区别。

循环结构习题

  • 第一题:2023-08-14T07:30:07.png

    • 解法一:do-while
      2023-08-14T07:33:14.png
    • 解法二:while or for
      note: 跳出循环的两种方式,循环条件不满足 & break
      2023-08-14T07:41:57.png

嵌套循环

  • 嵌套循环:一个循环结构中的循环体中,嵌套着另一个循环结构,这就构成了嵌套循环。相当于,一个循环的循环体是一个循环。
  • 练习:
    2023-08-14T09:02:20.png
    2023-08-14T09:03:01.png
  • 嵌套循环的应用

    • 九九乘法表:
      2023-08-15T07:16:51.png
    • 100以内的所有质数
      质数:大于1的,只能被1和其本身整除的自然数。如15,15 / 3 = 5,因此15可以被3和5整除,不是质数。
      note:

      1. System.currentTimeMillis():返回从1970年1月1日00:00到当前时间的毫秒数,long型。
        2023-08-15T08:10:20.png
        2023-08-15T08:10:47.png
      2. 在一般领域,对正整数n,如果用2到$\sqrt{n}$之间的所有整数去除,均无法整除,则n为质数。
        理解:一个数如果能被整除,那么就存在两个因子,一个因子大,一个因子就隐含地指示了另一个因子,比如12的可以被3整除,也说明了12可以被4整除。因此只需要考虑一部分数就能说明一个范围的数是否存在因子。从i=2开始,如果n不能被2整除,也说明了不能被n/2的结果整除;如果n不能被3整除,也说明了不能被n/3的结果整除;以此类推,显然随着i的增大,n/i在减小,最终当i=$\sqrt{n}$时,就相当于判断完了从i=2到n本身这一范围的所有数是否为i的因子。
        2023-08-15T08:37:21.png
      3. Math.sqrt(double a):表示$\sqrt{a}$。
        2023-08-15T08:43:54.png
      4. break的使用和根号的方法,实际上是一种优化,这里感觉不到优化了,有两个原因,第一是2~100太少,第二是每次输出操作是很花时间的,影响了计算性能的体现。以下将操作范围改为2~10000,删除每次输出的操作,换为最后只输出一次的操作,以体现优化。
        2023-08-15T08:51:03.png
        2023-08-15T08:52:52.png
        2023-08-15T08:54:37.png

流程控制语句:break和continue关键字

  • break

    • 使用范围:switch-case语句,循环结构。
    • 作用:跳出当前结构,比如跳出循环或跳出switch-case
    • note:默认break是跳出当前这一层循环,但也可以通过使用标签,指定break跳出其他层的循环。
      使用标签就是在指定的循环结构前用一个标签加冒号来标识,如label: for(;;),然后在break后加上标签即可,如break label;
      2023-08-15T09:21:47.png
      2023-08-15T09:22:37.png
  • continue

    • 使用范围:循环结构。
    • 作用:跳过当次循环。
    • note:默认continue是跳出当前这一层循环的当次循环,但也可以通过使用标签,指定continue跳出其他层的当次的循环。
      使用标签就是在指定的循环结构前用一个标签加冒号来标识,如label: for(;;),然后在continue后加上标签即可,如continue label;
      2023-08-15T09:25:18.png
      2023-08-15T09:26:31.png
  • breakcontinue后面都不能接语句,接了也没有意义,因为始终执行不了,但是做这种无意义的事编译都过不了。
    2023-08-15T09:11:52.png
    2023-08-15T09:12:15.png
  • 利用带标签的continue实现质数的输出问题。
    2023-08-15T09:38:53.png
Last Modified: October 27, 2023