循环语句结构

1.循环结构

  • 作用:通过某个条件,可以反复执行代码。
  • 程序的执行流程:
    1. 顺序执行流程:从第一行代码开始运行到最后一行代码结束,每行代码执行次数1次。
    2. 条件分支流程:根据某个条件选择要执行的代码,每行代码执行次数 0~1次。
    3. 循环执行流程:根据某个条件反复执行代码,每行代码执行次数 0~n次。
    

2.循环的分类

2.1 while循环
  • 语法:
    while( 布尔表达式 ){
        // [循环体]当布尔表达式为true执行,执行完毕后再次判断布尔表达式是否为true。
    }
    
  • 执行流程:
    1. 判断布尔表达式是否为true。
    2. 如果为true执行循环体(1~2反复执行), 如果为false 立即跳出循环。
    

如图所示:在这里插入图片描述
掌握循环的执行流程,记录每一次变量的变化。

  • 有限次数循环
    概念:将循环执行次数控制在一个固定的范围。
    演示的代码如下:循环打印10个HelloWorld。
public class TestLoop{
    public static void main(String[]args) {
        System.out.println("----程序开始----");
        // 打印10个HelloWorld
        int i = 1;	// 循环变量
        while(i<=10){	// 循环条件
            System.out.println("HelloWorld!"+i);
            i++;		// 修改循环变量的值
        }
        System.out.println("----程序结束----");
    }
}
  • 有限次数循环的三要素
  1. 定义循环变量:设置循环起点
  2. 设置循环条件:设置循环终点
  3. 改变循环变量的值:控制步长

如图所示的跑步:在这里插入图片描述
演示,使用while循环计算1~100的和代码如下:

public class TestWhile{
    public static void main(String[]args){
        // 1+2+3+4+5+6.....+100
        int sum = 0;    // 存储每次相加的结果
        int i = 1;		
		/*
		sum += i;   //累加  1
		i++;	    // i=2
		sum += i;   // 累加  3
		i++;     // i=3
		sum += i;   // 累加6
		i++;	 // i=4
		*/
        //....
        while( i<=100 ){

            sum += i;   // 累加求和
            i++;    // i变量自增1
            System.out.println( sum );  // 打印每次运算结果
        }
    }
}
2.2 do…while
  • 语法:
    do{
        // [循环体] 当布尔表达式为true时执行 
    }while( 布尔表达式 );
    
    演示:打印10个HelloWorld。
public class TestDoWhile{
    public static void main(String[]args){
        // 1.定义循环变量
        int i = 1;
        do{
            System.out.println("HelloWorld " + i);
            // 3.改变循环变量的值
            i++;

        }while( i>=10 );    // 2.设置循环条件
    }
}

执行流程:

1. 执行循环体。
2. 再判断循环条件的真假。

如图所示:
在这里插入图片描述

  • while与do…while的区别?
    while循环:先判断,再执行。
    do...while循环:先执行,再判断,用于先尝试执行一次再决定是否循环。
    如果第一次验证循环条件为false,do..while比while多执行一次,否则执行次数一致。
    
2.3 for
  • 特点:将三要素融入到语法中形成一行,直观的看到循环次数。
    语法:
for(定义循环变量; 设置循环条件; 改变循环变量的值){
    // [循环体]当布尔表达式为true时执行
}

演示:使用for循环打印10个HelloWorld。

package com.txw.test;

public class TestFor {
    public static void main(String[] args) {
        // 打印10个HelloWorld
        for (int i = 1; i <= 10; i++) {
            System.out.println("HelloWorld" + i);
        }
    }
}

执行流程:

while循环一致。
1、定义循环变量。
2、判断循环条件。
3、执行循环体。
4、改变循环变量的值。

如图所示:在这里插入图片描述
根据for循环的声明直观看出循环次数。

for(int i=0; i<=20; i++)  	// 循环次数:21
for(int i=5; i>=0;  i--)  	// 循环次数:6
for(int i=1; i<=10; i*=2) 	// 循环次数:4
for(;;)		// 死循环

每种循环的特点:

while、do…while:适用于不明确次数循环。
for:适用于明确次数循环。

3.循环练习

3.1 计算1~n的阶乘
  • 阶乘:1*2*3*4…*n
package com.txw.test;

public class TestFor2 {
    public static void main(String[] args) {
        int n = 20;
        // 计算n的阶乘
        int r = 1;
        // 1*2*3*4*5
        for (int i = 1; i <= n; i ++) {
            r *= i;
            System.out.println(i + "的阶乘:" + r);
        }
    }
}
3.2 打印n的所有因子
  • 能被n整除的数字就是n的因子
    穷举法:先找到结果的所在范围, 在该范围内对数据逐一验证,直至满足条件找到结果。
    演示的代码如下:
package com.txw.test;

public class Test {
    public static void main(String[]args) {
        int n = 12;
        for(int i = 1; i <= n; i ++){
            // 判断n%i是否为0,如果为0则证明i是n的因子
            if( n % i == 0 )
                System.out.println(i+"是"+n+"的因子");
        }
    }
}
3.3 求四叶玫瑰数
  • 四叶玫瑰树,是指一个四位数abcd 满足 a^4 +b4+c4+d^4 == abcd 。
    演示的代码如下:
public class Test{
    public static void main(String[]args) {
        // 明确答案所在范围:1000~9999
        for(int abcd = 1000; abcd <= 9999; abcd ++){
            int a = abcd/1000;      // 千位
            int b = abcd/100%10;    // 百位
            int c = abcd/10%10; // 十位
            int d = abcd%10;    // 个位
            if(a * a * a * a + b * b * b * b + c * c * c * c + d * d * d * d == abcd){
                System.out.println(abcd +" 是四叶玫瑰树");
            }
        }
    }
}
4 套循环

演示的代码如下:

public class Test{
    public static void main(String[]args) {
        for(int j = 1; j <= 3; j ++){
            System.out.println("外层循环:"+ j);
            for(int i = 1; i <= 5; i ++){
                System.out.println("\t内层循环:"+ i);
            }
        }
    }
}

执行的流程如图所示:
在这里插入图片描述
嵌套循环执行流程:外层循环执行一次,内层循环执行n次。如图所示:在这里插入图片描述

4.1 计算1*1~5 + 2*1~5 + 3*15…n*15

1.分析结果如下:

1*1*2*3*4*5 
    +
2*1*2*3*4*5
    +
3*1*2*3*4*5
....   

2.演示的代码如下:

public class Test{
    public static void main(String[]args) {
        int sum = 0;
        int n  = 6;
        for(int i = 1; i<= n; i ++){
            //1 *1*2*3*4*5
            for(int j = 1; j <= 5; j ++){
                // i=1  j=1		i=2  j=1
                //	   j=2			 j=2
                //     j=3			 j=3
                //     j=4			 j=4
                //     j=5			 j=5  .....
                sum += i * j;
                // 打印每次i与j值查看结果
                System.out.print( i + "*" + j + "   " );
            }
            // 每轮计算结束后换行
            System.out.println();
        }
        // 打印结果
        System.out.println( sum );
    }
}
4.2 打印图形
  • 规律:内层循环控制列,外层循环控制行。
    比如:正方形
*  *  *  *  *
*  *  *  *  *
*  *  *  *  *
*  *  *  *  *
*  *  *  *  * 

演示的代码如下:

public class Test{
    public static void main(String[]args) {
        for(int i = 1; i <= 5; i ++){
            for(int j = 1; j <= 5; j ++){
                // 内层循环控制每一行要打印的内容
                System.out.print("* ");
            }
            // 换行语句在外层循环中,由外层循环控制行
            System.out.println();
        }
    }
}

比如:三角形

*
* *
* * *
* * * *
* * * * *
* * * * * *
* * * * * * *
* * * * * * * *
* * * * * * * * *

演示的代码如下:

public class Test{
    public static void main(String[]args) {
        /* 外层循环控制行i 内层循环控制列j
		    i=1		* 			j1~1  1次
		    i=2		* * 		j1~2  2次
		    i=3		* * * 		j1~3  3次
		    i=4		* * * *     j1~4  4次
		    i=5		* * * * *   j1~5  5次
	*/
        for(int i = 1; i <= 9; i ++){
            // 打印*号
            for(int j = 1; j <=i ; j ++){
                System.out.print("* ");
            }
            System.out.println();
        }
    }
}

5. 流程控制语句(关键字)

5.1 break
  • 作用:跳出switch结构与循环结构
    演示的代码如下:
public class Test{
    public static void main(String[]args) {
        System.out.println("循环开始");
        for(int i = 1; i <= 10; i ++){
            if(i == 5) break; // 跳出循环
            System.out.println("HelloWorld"+ i);
        }

        System.out.println("循环结束");
    }
}

演示:求阶乘结果超过100000当前数。

public class Test{
    public static void main(String[]args) {
        int i = 1;
        int r = 1;      // 存储阶乘结果
        // 求阶乘结果超过100000当前数
        while(true){
            r *= i;     // 计算阶乘结果
            System.out.println(i + "\t" + r);
            if(r >= 100000) {
                break;      // 跳出循环
            }
            i ++;
        }
    }
}
5.2 continue
  • 作用:跳出本次循环执行下一次循环。
    演示的代码如下:
public class Test{
    public static void main(String[]args) {
        System.out.println("循环开始");
        for(int i = 1; i <= 10; i ++){
            if(i == 5){
                continue;       // 跳出循环
            }
            System.out.println("HelloWorld"+ i);
        }
        System.out.println("循环结束");
    }
}

演示:百钱买百鸡的代码如下:

package com.txw.test;

public class Test {
    public static void main(String[]args) {
        // 10钱买10鸡
        // 公鸡3 文 母鸡2文  小1文3只
        // 穷举法
        // 母鸡 0    小鸡0		验证 10只 10文
        // 母鸡 0    小鸡1		验证 10只 10文
        // 母鸡 0    小鸡2		验证 10只 10文
        // 母鸡 0    小鸡3		验证 10只 10文
        // 母鸡 0    小鸡4		验证 10只 10文
        // 母鸡 0    小鸡5		验证 10只 10文
        // 母鸡 0    小鸡6		验证 10只 10文
        // 母鸡 0    小鸡7		验证 10只 10文
        // 母鸡 0    小鸡8		验证 10只 10文
        // 母鸡 0    小鸡9		验证 10只 10文
        // 母鸡 0    小鸡10		验证 10只 10文
        // 母鸡 1    小鸡0		验证 10只 10文
        // 母鸡 1    小鸡1		验证 10只 10文
        // 母鸡 1    小鸡2		验证 10只 10文
        // 母鸡 1    小鸡3		验证 10只 10文
        // 母鸡 1    小鸡4		验证 10只 10文
        // ...
        // 母鸡 10   小鸡10     	验证 10只 10文
        int count = 0;
        for(int i = 0 ; i <= 33; i ++){ // 公鸡
            int max = (100 - i * 3) / 2;
            for(int j= 0; j <= max; j ++){  // 母鸡
                //  j = 1  k 0~10
                //  j = 2  k 0~10
                count++;// 统计循环次数
                int k = 100 - i - j;    // 计算小鸡数量
                // 如果k不能被3整除跳过后续运算
                if(k % 3 != 0)continue;
                // 数量		钱
                if(i + j + k == 100 && i * 3 + j * 2 + k / 3 == 100){
                    System.out.println("公鸡:"+ i +"  母鸡:"+ j +"  小鸡:"+ k);
                }

            }
        }
        System.out.println( count );
        // 6 74    20钱小鸡 61/3 60/3 20
    }
}

6 习题

  1. 以下描述正确的是(A)
    A. 循环分为 while 循环、for 循环 、do…while 循环 。
    B. while 循环是先执行,再判断。
    C. 所有循环的循环体,一定会被执行。
    D. break 只能应用于循环结构中,代表终止、跳出本层循环。
    原因:while循环和for循环先判断再执行,不满足条件不执行,满足条件才会执行。 break代表跳出switch和循环结构。
  2. 仔细阅读以下程序代码,对结果分析正确的是(D)
public class Test{
    public static void main(String[]args) {
        int i = 0;
        while (i < 10){
            System.out.println("HelloWorld");
        }
    }
}

A. 程序编译报错
B. 程序运行报错
C. 程序打印 10 遍 HelloWorld
D. 不断打印 HelloWorld
原因:循环变量没有迭代部分造成死循环。
3. 仔细阅读以下程序代码,对结果分析正确的是©

public class Test{
    public static void main(String[]args) {
        int i = 0;
        while (i < 5 && i % 2 == 0){
            System.out.println("HelloWorld" + i);
            i ++;
        }
    }
}

A. 编译报错。
B. 运行结果为:死循环。
C. 运行结果为:HelloWorld0。
D. 运行结果为:HelloWorld0 HelloWorld2 HelloWorld4。
4. 仔细阅读以下程序代码,如果正确则写出程序打印输出的结果;不正确,解释原因。

public class Test{
    public static void main(String[]args) {
        int i = 1;
        do {
            int sum  =  0;
            sum += i;
            i ++;
        }while (i < 5);
        System.out.println( "sum= " + sum);
    }
}

答:原因:sum定义在do{}中,在do{}外面访问sum,报错。
5. 仔细阅读以下程序代码,如果正确则写出程序打印输出的结果;不正确,解释原因。

public class Test{
    public static void main(String[]args) {
        for (int i = 1; ; i ++){
            if (i == 5){
                break;
            }
            System.out.println("HelloWorld" + i);
        }
    }
}

答:正确:
打印结果为:
HelloWorld1
HelloWorld2
HelloWorld3
HelloWorld4
6. 编程:计算 1+2+3+…+100 的和。(要求至少两种循环结构实现)。
演示的代码如下:

public class Test{
    public static void main(String[]args) {
      int i = 1, sum =0;
      while (i <= 100){
          sum += i ;
          i ++;
      }
        System.out.println("sum= " + sum);
    }
}

第二种演示的代码如下:

public class Test{
    public static void main(String[]args) {
      int sum = 0;
     for (int i = 1; i <= 100; i ++){
         sum += i;
     }
        System.out.println("sum= " + sum);
    }
}
  1. 编程:计算 1+3+5+…+99 的和。(要求至少两种循环结构实现) 。
    演示的代码如下:
public class Test{
    public static void main(String[]args) {
      int sum = 0;
     for (int i = 1; i <= 100; i ++){
        if (i % 2 != 0){
            sum += i;
        }
     }
        System.out.println("sum= " + sum);
    }
}

第二种演示的代码如下:

public class Test{
    public static void main(String[]args) {
      int sum = 0,i =1;
        while (i <= 100){
            if (i % 2 != 0){
                sum += i;
            }
            i ++;
        }
        System.out.println("sum= " + sum);
    }
}
  1. 编程:读入一个小于 10 的整数 n,输出它的阶乘 n。(for 循环) .
    演示的代码如下:
import java.util.Scanner;
public class Test{
    public static void main(String[]args) {
        System.out.println("请输入一个小于10的整数:");
        Scanner s = new Scanner(System.in);
        int n = s.nextInt();
        double result = 1;
        for (int i =1; i <= n ; i ++){
            result *= i;
        }
        System.out.println(result);
    }
}
  1. 编程:求 100 以内所有能被 3 整除但不能被 5 整除的数字的和。(for 循环) 。
    演示的代码如下:
public class Test{
    public static void main(String[]args) {
        int result = 0;
        for (int i = 0; i <=100; i++) {
            if (i % 3 == 0 && i % 5 != 0){
                result +=i;
            }
        }
        System.out.println(result);
    }
}
  1. 编程:本金 10000 元存入银行,年利率是千分之三,每过 1 年,将本金和利息相加作为新的 本金。计算 5 年后,获得的本金是多少打印输出。
    演示的代码如下:
public class Test{
    public static void main(String[]args) {
        double result = 10000;
        for(int i = 1; i <= 5;i ++){
            result += (result * 0.003);
        }
        System.out.println(result);
    }
}
  1. 编程:找出四位整数 abcd 中满足 (ab+cd)(ab+cd)=abcd 的数。
    演示的代码如下:
public class Test{
    public static void main(String[]args) {
        for(int i = 1000;i <= 9999;i ++){
            int ab = i / 100;
            int cd = i % 100;
            int x = (ab + cd) * (ab + cd);
            if(x == i){
                System.out.println(i);
            }
        }
    }
}

12… 编程:求水仙花数。所谓水仙花数,是指一个三位数 abc,如果满足 a³+b³+c³=abc,则 abc 是水仙花数。
演示的代码如下:

public class Test{
    public static void main(String[]args) {
        for(int i = 100;i <= 999;i ++){
            int a = i / 100;
            int b = i / 10 % 10;
            int c = i % 10;
            int x = a * a * a + b * b * b + c * c * c;
            if(x == i){
                System.out.println(i);
            }
        }
    }
}
  1. 编程:实现输出 99 乘法表。
    演示的代码如下:
public class Test{
    public static void main(String[]args) {
        for(int i = 1; i <= 9;i ++){
            for(int j = 1; j <= i;j ++){ 
                System.out.print(j + "*" + i + "=" + j * i +"\t");
            }
            System.out.println();
        }
    }
}
  1. 编程:“百钱买百鸡”是我国古代的著名数学题。
    题目描述:3 文钱可以买 1 只公鸡,2 文钱可以买一只母鸡,1 文钱可以买 3 只小鸡。
    用 100 文钱买 100 只鸡,那么各有公鸡、母鸡、小鸡多少只?
    演示的代码如下:
public class Test{
    public static void main(String[]args) {
        for(int x = 0; x <= 33; x ++){
            int n = (100 - 3 * x) / 2;
            for(int y = 0;y <= n; y ++){
                int z = 100 - x - y;
                if(z % 3 != 0){
                    continue;
                }
                if(3 * x + 2 * y + z / 3 == 100){
                    System.out.println(x + "只公鸡," + y + "只母鸡," + z +"只小鸡");
                }
            }
        }
    }
}

15.编程:输入一个整数 n,打印输出以下正方形:
在这里插入图片描述
思路:
(1) 读入一个整数 n,代表正方形的行数。
(2) 对于每一行需要打印的数字内容:
A. 控制每行数字 1 的个数。
B. 控制每行除 1 以外的数字内容。
C. 换行。
演示的代码如下:

import java.util.Scanner;
public class Test{
    public static void main(String[]args) {
        System.out.println("请输入一个正整数:");
        Scanner s = new Scanner(System.in);
        int n = s.nextInt();
        for(int i = 1; i <= n; i ++){
            for(int j = 1; j<= n - (i - 1); j ++){
                System.out.print(j + "\t");
            }
            System.out.println();
        }
    }
}
  1. 编程:读入一个整数 n,输出如下图形:
    在这里插入图片描述
    思路:
    (1) 读入的整数 n,就是外层循环的循环次数。
    (2) 对于每一行,要做的事情:
    A. 输出若干个空格 。
    B. 输出若干个星。
    C. 换行。
    演示的代码如下:
import java.util.Scanner;
public class Test{
    public static void main(String[]args) {
        System.out.println("请输入一个正整数:");
        Scanner s = new Scanner(System.in);
        int n = s.nextInt();
        for(int i = 1; i <= n; i ++){
            for(int j = 1; j <= n - i; j++){
                System.out.print(" ");
            }
            for(int j = 1; j <= 2 * i - 1; j ++){
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

总结如图所示:
在这里插入图片描述

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学无止路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值