day05 循环结构

循环结构

1. do-while循环

do {

​ 循环操作

} while ( 循环条件 );

do-while循环可以用于处理循环次数确定 或者 循环次数不确定的情况

通常用于处理循环次数不确定的情况

while和do-while的区别?

while循环先判断 后执行 条件不成立 一次都不执行

do-while循环 先执行 后判断 不管条件是否成立 至少执行一次

package com.atguigu.test1;

import java.util.Scanner;

/**
 *  经过几天的学习,老师给赵四一道测试题,让他先上机编写程序完成,然后老师检查是否合格。
 *  如果不合格,则继续编写……
 *
 *  do-while循环可以用于处理循环次数确定 或者 循环次数不确定的情况
 *  通常用于处理循环次数不确定的情况
 * */
public class Test1 {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        String answer;  // 计数器
        do{
            System.out.println("赵四上机编写测试题");  // 循环体
            System.out.print("请输入学习任务是否合格? y/n:");
            answer = input.next();  // 计数器初始化  变化

        }while (answer.equals("n"));  // 判断条件

        System.out.println("恭喜你完成学习任务");
    }
}

package com.atguigu.test1;
/**
 * 使用do-while循环打印100遍好好学习
 *
 * while和do-while的区别?
 * while循环 先判断 后执行 条件不成立的话 一次都不执行
 * do-while循环 先执行 后判断 不管条件是否成立 至少执行一次
 * */

public class Test2 {
    public static void main(String[] args) {

        int i = 1;  // 初始化
        do {
            System.out.println("第" + i + "遍好好学习");  // 循环体
            i++;  // 计数器变化
        }while (i <= 100);  // 判断条件
    }
}

2. for循环

for循环 用于处理循环次数确定的情况

for循环执行顺序

第一轮:

​ 1.计数器初始化 并且只执行一次

​ 2.执行判断条件

​ 3.执行循环体

​ 4.执行计数器变化

第二轮:

​ 直接从 第2步:执行判断条件 开始

package com.atguigu.test2;

/**
 *
 * for循环 用于处理循环次数确定的情况
 *
 * for循环执行顺序
 * 第一轮:
 *      1.计数器初始化 并且只执行一次
 *      2.执行判断条件
 *      3.执行循环体
 *      4.执行计数器变化
*  第二轮:
 *      直接从 第2步:执行判断条件 开始
 *
 * 使用for循环打印100次好好学习
 * */

public class Test1 {
    public static void main(String[] args) {
        for (int i = 0; i <= 100; i++) {
            System.out.println("第" + i + "遍好好学习");
        }
        System.out.println("程序结束");
    }
}

package com.atguigu.test2;

import java.util.Scanner;

/**
 * 循环输入某同学结业考试的5门课成绩,并计算平均分
 * */
public class Test2 {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        double sum = 0;

        for (int i = 1; i <= 5; i++) {
            System.out.print("请输入第" + i + "门成绩:");
            double score = input.nextDouble();
            sum += score;
        }
        System.out.println("平均分为:" + sum / 5);
        System.out.println("程序结束");
    }
}

package com.atguigu.test2;

import java.util.Scanner;

/**
 * 输出加法表
 * */
public class Test3 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.print("请输入一个数字:");

        int num = input.nextInt();

        for (int i = 0; i <= num; i++) {
            System.out.println(i + "+" + (num - i) + "=" + num);
        }
    }
}

3.for循环常见问题

for循环常见问题1:没有计数器初始化

package com.atguigu.test3;

/**
 * for循环常见问题1:没有计数器初始化
 * */
public class Test1 {
    public static void main(String[] args) {
        for (int i = 1; i < 10; i++) {
            System.out.println("这是" + i);
        }
        System.out.println("程序结束");
    }
}

for循环常见问题2:没有判断条件 导致死循环

for循环中 两个分号 一个都不能缺少 否则编译报错

package com.atguigu.test3;

/**
 * for循环常见问题2:没有判断条件 导致死循环
 * for循环中 两个分号 一个都不能缺少 否则编译报错
 * */
public class Test2 {
    public static void main(String[] args) {
        for (int i = 0;; i++) {
            System.out.println(i);
        }
        // System.out.println("程序结束");  // 不可到达的代码
    }
}

for循环常见问题3:缺少计数器变化 导致死循环

package com.atguigu.test3;

/**
 * for循环常见问题3:缺少计数器变化 导致死循环
 * */
public class Test3 {
    public static void main(String[] args) {
        for (int i = 1; i <= 10;) {
            System.out.println(i);
        }
    }
}

for循环常见问题4:小阔号中只写两个分号 导致死循环

package com.atguigu.test3;
/**
 * for循环常见问题4:小括号中只写两个分号 导致死循环
 * */
public class Test4 {
    public static void main(String[] args) {
        for(;;){
            System.out.println("hello world");
        }
    }
}

4. 三种循环对比

三种循环对比

区别2:执行顺序

while 循环:先判断,再执行

do-while循环:先执行,再判断

for循环:先判断,再执行

区别3:适用情况

循环次数确定的情况,通常选用for循环

循环次数不确定的情况,通常选用while或do-while循环

5. break关键字

使用循环和break关键字 模拟跑步中途退出的效果

break关键字:可以用于switch和循环中 在switch中表示跳出switch结构

在循环中表示中断循环 未执行完的循环次数 不再执行

break在循环中通常(99%)要结合分支语句一起使用

循环中存在switch switch中的break只会跳出switch 并不会中断循环

package com.atguigu.test4;

/**
 * 使用循环和break关键字 模拟跑步中途退出的效果
 *
 * break关键字:可以用于switch和循环中 在switch中表示跳出switch结构
 * 在循环中表示中断循环 未执行完的循环次数 不再执行
 *
 * break在循环中通常(99%)要结合分支语句一起使用
 * 循环中存在switch switch中的break指挥跳出switch 并不会中断循环
 * */
public class Test1 {
    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            System.out.println("跑步第" + i + "圈");
            if (i == 5){
                System.out.println("太累了,退出");
                break;  // 代码执行到这里 将中断循环 未执行完的次数 不再执行
//                System.out.println();  // 这里依然是不可到达的代码,因为遇到break直接中断循环
            }

        }
        System.out.println("程序结束");
    }
}

循环录入某学生5门课的成绩并计算平均分,如果某分数录入为负,停止录入并提示录入错误

package com.atguigu.test4;

import java.util.Scanner;

/**
 * 循环录入某学生5门课的成绩并计算平均分,如果某分数录入为负,停止录入并提示录入错误
 * */
public class Test2 {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        System.out.print("请输入您的名字:");
        String name = input.next();

        int sum = 0;  // 定义sum变量 用于累计总和
        boolean flag = true;  // 定义布尔类型变量 作为是否录入负数成绩的标识
        for (int i = 1; i <= 5; i++) {
            System.out.print("请输入第" + i + "门成绩:");
            int score = input.nextInt();
            if (score < 0){
                flag = false;
                System.out.println("录入分数错误,停止录入");
                break;
            }
            sum += score;

        }
        if (flag){
            System.out.println(name + "的平均分是:" + sum / 5);
        }else{
            System.out.println("分数录入有误,不再计算平均分");
        }
    }
}

1~10之间的整数相加,得到累加值大于20的当前数

package com.atguigu.test5;

/**
 *  1~10之间的整数相加,得到累加值大于20的当前数
 * */
public class Test1 {
    public static void main(String[] args) {
        int sum = 0;
        for (int i = 1; i <= 10; i++){
            sum += i;
            if (sum > 20){
                System.out.println("大于20的总和为" + sum + ", i的取值为:" + i);  // 大于20的总和为21, i的取值为:6
                break;
            }
        }
    }
}

6. continue关键字

continue :只能用在循环里
continue 作用:跳过循环体中剩余的语句而执行下一次循环

package com.atguigu.test5;

import java.util.Scanner;

/**
 * 循环录入Java课的学生成绩,统计分数大于80分的学生比例
 * */
public class Test2 {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        System.out.print("请输入班级总人数:");

        double count = input.nextInt();
        int sum = 0;  // 定义变量 用于统计大于80分的人数
        for (int i = 1; i <= count; i++) {
            System.out.print("请输入第" + i + "个人的成绩:");

            int score = input.nextInt();

            if (score <= 80){
                System.out.println("分数小于等于80分,不进行统计");
                continue;
            }
            sum++;
        }
        System.out.println("大于80分的总人数为:" + sum);
        System.out.println("分数大于80分的人数占比是:" + sum / count * 100 + "%");
    }
}

求1~10之间偶数和

package com.atguigu.test5;

/**
 * 求1~10之间的所有偶数和
 * */
public class Test3 {
    public static void main(String[] args) {
        // 方式1:使用continue
        int sum = 0;
        for (int i = 1; i <= 10; i++){
            if (i % 2 != 0){
                continue;
            }
            sum += i;
        }
        System.out.println("1~10之间偶数和为:" + sum);  // 1~10之间偶数和为:30

        // 方式2
        int sum1 = 0;
        for (int i = 1; i <= 10; i++){
            if (i % 2 == 0){
                sum1 += i;
            }
        }
        System.out.println("1~10之间偶数和为:" + sum1);  // 1~10之间偶数和为:30
    }
}

7. break和continue对比

使用场合
break用于switch结构和循环结构中
continue用于循环结构中

作用(循环结构中)
break语句终止某个循环,程序跳转到循环块外的下一条语句
continue跳出本次循环,进入下一次循环
双重循环亦如此

8. 程序调试

程序调试

9.多重循环打印图案

多重循环规律:1.外层循环变量变化一次,内层循环变量变化一轮

9.1 矩形

使用多重循环打印图案:

1.外层循环控制行数

2.内层循环控制列数

package com.atguigu.test6;

/**
 * 分别使用单层循环 以及 多重循环是心啊打印 5行5列的矩形
 *
 * 多重循环规律:1.外层循环变量变化一次,内层循环变量变化一轮
 *
 * 使用多重循环打印图案:
 *      1.外层循环控制行数
 *      2.内层循环控制列数
 * */
public class Test1 {
    public static void main(String[] args) {

        for (int i = 1; i <= 5; i++){
            System.out.println("*****");
        }

        System.out.println("----------------");

        for (int i = 1;i <= 5; i++){  // 外层循环控制行数
            for (int j = 1; j <= 5; j++){  // 内层循环控制列数
                System.out.print("*");
            }
            System.out.println();  // 这里不打印任何内容 只有换行的效果
        }
    }
}

9.2 平行四边形

分析:

1.外层循环控制行数 一共5行 所以可以书写一个执行5次的循环作为外层循环

2.每一行包含两种元素 左半部分空白 和 右半部分*号 两种元素打印在一行 统一来一次换行

使用多重循环打印三角形:

1.第一行元素的个数决定了计数器的初始值

如果元素个数越来越多 那么就++ 此时 我们必须给计数器设置一个上限

也就是条件必须为 小于或者 小于等于某个值

如果元素个数越来越少 那么就-- 此时 我们必须给计数器设置一个下限

也就是条件必须为 大于或者 大于等于某个值

3.因为三角形每一行元素的个数是不相同的 所以 最终的条件 不能是一个固定的值

也就是 我们必须找到一个不断在变化的值

package com.atguigu.test6;

/**
 * 使用多重循环打印平行四边形
 *
 * 分析:
 *      1.外层循环控制行数 一共5行 所以可以书写一个执行5次的循环作为外层循环
 *      2.每一行包含两种元素 左半部分空白 和 右半部分*号 两种元素打印在一行 统一来一次换行
 *  使用多重循环打印三角形:
 *      1.第一行元素的个数决定了计数器的初始值
 *      2.如果元素个数越来越多 那么就++ 此时 我们必须给计数器设置一个上限 也就是条件必须为 小于 或者 小于等于 某个值
 *        如果元素个数越来越少 那么就-- 此时我们必须给计数器设置一个下限 也就是条件必须为 大于 或者 大于等于 某个值
 *
 *      3.因为三角形每一行元素的个数是不相同的 所以 最终的条件 不能是一个固定的值 也就是 我们必须找到一个不断在变化的值
 *
 *
 * */
public class Test2 {
    public static void main(String[] args) {
        for (int i = 1; i <= 5; i++){

            // 左半部分
            for (int j = 5; j >= i; j--){
                System.out.print(" ");
            }

            // 右半部分
            for (int j = 1; j <= 5; j++){
                System.out.print("*");
            }

            // 换行一次
            System.out.println();
        }
    }
}

9.3 正三角形
package com.atguigu.test6;

public class Test3 {
    public static void main(String[] args) {
        for (int i = 1; i <= 5; i++){  // 外层循环5行
            // 左半部分 倒三角
            for (int j = 5; j >= i; j--){
                System.out.print(" ");
            }

            // 右半部分 直角三角形
            // 右半部分规律 每一行元素的个数 是 行号 * 2 - 1
            for (int j = 1; j <= 2 * i - 1; j++){
                System.out.print("*");
            }

            // 换行
            System.out.println();
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值