循环结构
概念:通过某个条件,重复地执行一段逻辑代码。
一、while循环
语法
执行流程
先对布尔表达式进行判断,结果为true
,则执行逻辑代码。
本次执行完毕后,再次对布尔表达式进行判断,结果仍旧为true
,则再次执行逻辑代码。
直至布尔表达式的结果为false
时,才会退出循环结构,执行后续代码。
案例1:打印100遍hello world
1 2 3 4 5 6 7 8 9 public class TestWhile { public static void main (String[] args) { int i=1 ; while (i<=100 ){ System.out.println("Hello world" ); i++; } } }
运行结果:
注意:循环有四部分,初始部分、循环条件、循环操作、迭代部分组成。
while循环特点:首次即有入口条件,先判断,再执行, 适用于循环次数明确的情况。首次判断不满足,则一次都不会执行。(执行次数:0~n次)。
案例2:求1~100和。
1 2 3 4 5 6 7 8 9 10 11 public class TestSum1 { public static void main (String[] args) { int i = 1 ; int sum = 0 ; while (i<=100 ){ sum = sum + i; i++; } System.out.println(sum); } }
运行结果:
案例3:求1~100偶数的和奇数的和
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public class TestSum2 { public static void main (String[] args) { int i = 1 ; int sum1 = 0 ; int sum2 = 0 ; while (i<=100 ){ if (i % 2 == 0 ){ sum1 = sum1 + i; } if (i % 2 == 1 ){ sum2 = sum2 + i; } i++; } System.out.println("偶数和为:" +sum1); System.out.println("奇数和为:" +sum2); } }
运行结果:
二、do while循环
案例1:打印100遍hello world
1 2 3 4 5 6 7 8 9 public class TestDoWhile { public static void main (String[] args) { int i=1 ; do { System.out.println("hello world" + i); i++; }while (i<=100 ); } }
运行结果:
特点:直接执行循环操作,首次没有入口条件,先执行,再判断 ,执行一遍逻辑代码后,再去判断条件是否满足,如满足,则继续循环,不满足则退出循环。所以则至少执行一次(执行次数:1~n次)。
dowhile
的应用场景
适用于循环次数不明确 的情况。
案例1:检查学生作业完成情况,输入教师评语,决定学生是否需要抄写代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 import java.util.Scanner;public class TestDoWhile { public static void main (String[] args) { Scanner input = new Scanner(System.in); char answer; do { System.out.println("学生将作业给老师检查" ); System.out.print("教师输入评语:" ); answer = input.next().charAt(0 ); }while (answer != 'y' ); input.close(); } }
运行结果:
学生完成作业,给老师检查,老师通过则结束,老师未通过则重写后给老师再次检查,如此往复。(循环次数不明确)
三、for循环
案例1:打印100遍hello world
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 public class TestFor { public static void main (String[] args) { int i=1 ; while (i<=3 ){ System.out.println("hello world" ); i++; } System.out.println("*****************" ); i=1 ; for (;i<=3 ;){ System.out.println("hello world" ); i++; } System.out.println("*****************" ); for (i=1 ;i<=3 ;i++){ System.out.println("hello world" ); } } }
运行结果:
分别正常打印了三遍hello world
。
案例2:控制台输入整数n,计算n的阶乘(!n)。例:1 * 2 * 3 ··· * n
1 2 3 4 5 6 7 8 9 10 11 12 13 import java.util.Scanner;public class TestFactorial { public static void main (String[] args) { Scanner input = new Scanner(System.in); int n = input.nextInt(); int sum = 1 ; for (int i=1 ;i<=n;i++){ sum = sum * i; } System.out.println(n+"的阶乘为:" +sum); input.close(); } }
运行结果:
案例3:一个班级5位同学,通过控制台输入5名同学的分数,计算平均分。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 import java.util.Scanner;public class Test { public static void main (String[] args) { Scanner input = new Scanner(System.in); double sum = 0 ; for (int i=0 ;i<5 ;i++){ System.out.print("请输入第" +(i+1 )+"位同学的分数:" ); double score = input.nextDouble(); sum = sum + score; } double avg = sum/5.0 ; System.out.println("平均分为:" +avg); input.close(); } }
运行结果:
四、流程控制
1、break:终止、跳出switch或循环结构。
案例1:
1 2 3 4 5 6 7 8 9 10 public class TestBreak { public static void main (String[] args) { for (int i=0 ;i<10 ;i++){ if (i==5 ){ break ; } System.out.println("当前循环次数:" +i); } } }
运行结果:
当运行的第6次的时候跳出了整个循环。
2、continue:结束本次循环、进入下次循环,仅仅针对循环结构有效。
案例1:
1 2 3 4 5 6 7 8 9 10 public class TestContinue { public static void main (String[] args) { for (int i=0 ;i<10 ;i++){ if (i==5 ){ continue ; } System.out.println("当前循环次数:" +i); } } }
运行结果:
第i=5
次结束本次循环。
五、嵌套循环
概念:在一个完整的循环结构中,乔涛另一个完整的循环结构。
案例1:打印3行5颗星。
1 2 3 4 5 6 7 8 9 10 public class TestNestFor { public static void main (String[] args) { for (int i=0 ;i<3 ;i++){ for (int j=0 ;j<5 ;j++){ System.out.print("*" ); } System.out.println(); } } }
运行结果:
案例2:打印直角三角形
1 2 3 4 5 6 7 8 9 10 public class TestNestFor1 { public static void main (String[] args) { for (int i=0 ;i<6 ;i++){ for (int j=0 ;j<i;j++){ System.out.print("*" ); } System.out.println(); } } }
运行结果:
案例3:打印九九乘法表
1 2 3 4 5 6 7 8 9 10 public class TestNestFor2 { public static void main (String[] args) { for (int i=1 ;i<=9 ;i++){ for (int j=1 ;j<=i;j++){ System.out.print(i+"*" +j+"=" +(i*j)+"\t" ); } System.out.println(); } } }
运行结果:
案例3:打印等腰三角形
1 2 3 4 5 6 7 8 9 10 11 12 13 14 public class TestNestFor3 { public static void main (String[] args) { int n=11 ; for (int i=0 ;i<n/2 ;i++){ for (int j=0 ;j<n/2 -i;j++){ System.out.print(" " ); } for (int j=0 ;j<i*2 +1 ;j++){ System.out.print("*" ); } System.out.println(); } } }
运行结果: