4.1、循环结构【重点】
4.1.1、为什么使用循环结构?
在生活中,我们经常会遇到多次重复操作,如果说在程序中解决生活中重复案例,那又该如何来实现呢?这时Java语言提供了循环结构。
案例1:输出1-100之间的偶数?代码如下:
public class Demo1 { public static void main(String[] args) { // 重点:判断偶数的操作进行了100次,每一次判断偶数的操作是否的一样的? for (int i = 1; i <= 100; i++) { // 循环体 if (i % 2 == 0) System.out.println(i); } } } |
4.1.2、循环结构的语法格式?
for(表达式1;表达式2;表达式3) { 循环体; } |
表达式1:代表循环初值,声明循环变量并初始化。
表达式2:代表循环条件,用来控制循环停止。
表达式3:代表循环变量的操作,改变循环变量的值,来实现循环的终止。
注意:表达式之间用";"分割。
循环体:循环操作的具体内容。
注意:三个表达式的编写,避免造成死循环。
(如果缺失表达式2或表达式3将照成死循环)。
4.1.3、循环的要素及解体的思路
循环的操作-确认完成操作循环体的具体实现。
循环的次数-确认完成操作需要多少次循环。
循环初值、循环条件、循环变量的操作。
案例2:输出1-100之间的所有数之和?代码如下:
public class Demo2 { public static void main(String[] args) { // 注意:累加时赋初值为0 int sum = 0; for (int i = 1; i <= 100; i++) { // 我们应该使用赋合运算符 sum += i; } System.out.println("1-100所有数的和:" + sum); } } |
案例3:统计1-100之间能被3整除数的数量?代码如下:
public class Demo3 { public static void main(String[] args) { int count = 0; for (int i = 1; i <= 100; i++) { // 注意:当 IF语句块的代码只有一行时,可以省略{}。 if (i % 3 == 0) count++; } System.out.println("1-100之间能被3整除的数量是:" + count); } } |
案例4:请用户输入整数,判断是否能被3整除,如果能整除则计数,判断之后,询问用户是否继续?代码如下:
public class Demo4 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int count = 0; for (String isContinue = "y"; isContinue.equalsIgnoreCase("y");) { System.out.println("请输入一个整数:"); int number = scanner.nextInt(); if (number % 3 == 0) count++; System.out.println("您是否继续输入数字?(Y/N)"); isContinue = scanner.next(); } System.out.println("能被3整除的个数:" + count); } } |
通过以上案例,证明了for循环的第三个表达式是可以省略的;证明了for循环的循环变量不一定是整型,只要能够通过循环变量控制循环次数即可。
4.1.4、死循环【难点】
上面案例4当中,我们是不知道具体的循环次数的,只有满足的条件(用户输入N)才可以结束循环,像案例4这样的情况,不知道循环次数的时候,我们将循环称为死循环。
死循环的概念是永远不能终止的循环,但是这样的循环是没有意义的,大多数死循环都应用在达到指定条件时终止循环的场景。
案例5:上面的案例4还可一才用如下代码来实现,效果一样的:
public class Demo5 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int count = 0; String isContinue = "y"; for (;;) { System.out.println("请输入一个整数:"); int number = scanner.nextInt(); if (number % 3 == 0) count++; System.out.println("您是否继续输入数字?(Y/N)"); isContinue = scanner.next(); if (!isContinue.equalsIgnoreCase("y")) break; } System.out.println("能被3整除的个数:" + count); } } |
如果for循环的三个表达式都没有写,即“for (;;)”,我们称其为死循环。
但是问题是,这样循环就不能终止了,此时可以采用break关键字来跳出当前循环,一般break关键字在循环中会结合条件分支结构来实现跳出循环。
4.1.4、continue关键字
案例6:上面的案例5的功能,还可以更改成如下代码,效果一样的:
public class Demo6 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int count = 0; for (;;) { System.out.println("您是否要输入数字?(Y/N)"); String isContinue = scanner.next(); if (!isContinue.equalsIgnoreCase("y")) break; System.out.println("请输入一个整数:"); int number = scanner.nextInt(); if (number % 3 != 0) continue; count++; } System.out.println("能被3整除的个数:" + count); } } |
Continue关键字:结束本次循环,继续进行下一次循环,该关键字使用的比较少,了解即可。
4.2、while循环结构【重点】
案例7:请用户输入一个整数,将这个数的每一位拆分出来?代码如下:
public class Demo7 { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); System.out.println("请输入一个整数:"); int number=scanner.nextInt(); while(number!=0) { System.out.println(number%10); number/=10; } } } |
while循环结构的格式:
while (布尔表达式) { 循环体; } |
使用while循环结构的死循环实现案例7,代码如下:
public class Demo7 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入一个整数:"); int number = scanner.nextInt(); while (true) { System.out.println(number % 10); number /= 10; if (number == 0) break; } } } |
注意:While循环结构只有一个表达式,一般用在未知循环次数的场景,先判断循环条件,再执行循环体。
当程序需要使用死循环时,while循环结构的代码更加简洁、优雅。