4. Java循环语句

1. 三种循环结构
三种循环
     ▶ while结构:在指定条件为真时重复执行某个代码块的循环结构
             while循环只有一个循环条件,当条件为真时循环执行代码块,直到条件为假为止
     ▶ do…while结构:在指定条件为真时重复执行某个代码块的循环结构
             do-while循环至少会执行一次代码块,然后再判断循环条件
     ▶ for结构:在指定条件满足时重复执行某个代码块的循环结构
2. while循环
(1) while循环结构

语法:while (条件语句) {语句体}

while循环三要素: 1. 循环变量的初始化;
          2. 循环条件;
          3. 循环变量的改变

  • 执行示例
Created with Raphaël 2.3.0 开始 循环变量的初始化 i=0 while( i<5) 循环 循环体语句 i++ (循环条件) 结束 yes no
  • 格式
// 循环变量初始化
while (循环条件) {
    // 循环执行的代码块;
	// 条件控制语句;
}
  • 代码演示
package bases;

import java.util.Random;
import java.util.Scanner;

public class Demo04_Loop {
    public static void main(String[] args) {
        /*
         * while循环
         */
        Scanner scanner = new Scanner(System.in);
        int times = 5;
        int num = 0;
        while (num < times) {
            System.out.println("循环第" + (num + 1) + "次");
            num++;
        }

        // 判断一个数是否为素数
        System.out.print("请输入需要判断的数:");
        int nums = scanner.nextInt();
        boolean isPrime = true;
        int i = 2;
        while (i <= nums / 2) {
            if (nums % i == 0) {
                isPrime = false;
                break;
            }
            i++;
        }
        if (isPrime) {
            System.out.println(nums + " 是素数");
        } else {
            System.out.println(nums + " 不是素数");
        }

        // 案例:猜数
        Random random = new Random();
        // 生成一个随机数
        int hide = random.nextInt(101);
        // 用户输入所猜的数
        System.out.print("请输入要猜的数:");
        int guess = scanner.nextInt();
        while (guess != hide) {
            String flag = guess > hide ? "猜大了" : "猜小了";
            System.out.println(flag);
            guess = scanner.nextInt();
        }
        System.out.println("恭喜你,猜对了");
    }
}

(2)do…while循环结构

语法:do {
      循环体语句;
      条件控制语句;
   } while (条件判断语句);

do…while特点: 先无条件执行一次代码块,再进行条件判断

  • 执行示例
Created with Raphaël 2.3.0 开始 执行一些操作 条件判断 结束 yes no
  • 格式
do {
    // 循环执行的代码块
} while (循环条件);
  • 代码演示(三元运算符版本)
package bases;

import java.util.Random;
import java.util.Scanner;

public class Demo04_Loop {
    public static void main(String[] args) {
    	/*
         * do…while循环
         */
        // do…while猜数
        Random random = new Random();
        // 生成一个随机数(1~100)
        int hide = random.nextInt(101);
        // 用户输入所猜的数
        System.out.print("请输入要猜的数:");
        int guess = scanner.nextInt();
        do {
            String flag = guess > hide ? "猜大了" : "猜小了";
            System.out.println(flag);
            guess = scanner.nextInt();
        } while (guess != hide);
        // 猜对语句在循环外
        System.out.println("恭喜你,猜对了");
    }
}
  • 代码演示(if版本)
package bases;

import java.util.Random;
import java.util.Scanner;

public class Demo04_Loop {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 案例:猜数
        Random random = new Random();
        // 生成一个随机数
        int hide = random.nextInt(101);
        /*
         * do…while循环
         */
        int guess;
        do {
            System.out.print("请输入要猜的数:");
            guess = scanner.nextInt();
            if (guess > hide){
                System.out.println("猜大了");
            } else if (guess < hide) {
                System.out.println("猜小了");
            } else {
                // 猜对语句在循环内
                System.out.println("恭喜你,猜对了");
            }
        } while (guess != hide);
    }
}
  • 区别
  • while和do…while的区别
         while:先做判断再执行(可能不执行语句块)
         do…while:先执行在判断,(语句块必须执行一次)
    在这里插入图片描述
3. for循环结构

语法:for (初始化语句;条件判断语; 更新语句) {
     功能语句体;
      }
执行流程:
  1.执行初始语句
  2.执行条件判断语句
   false,循环结束
   true,循环执行
  3.执行循环体语句
  4.执行条件控制语句
  5.返回第二步

  • 执行示例
true
false
开始
初始化语句
for 循环条件?
循环体语句
循环后操作
结束
  • 格式
for (初始化语句; 条件判断语; 更新语句) {
    // 循环执行的代码块
}
  • 代码演示
package bases;

import java.util.Random;
import java.util.Scanner;

public class Demo04_Loop {
    public static void main(String[] args) {
        /*
         * for循环
         */
        // 1到100之间的所有偶数的总和
        int sum = 0;
        for (int i = 1; i <= 100; i++) {
            if (i % 2 == 0) {
                sum += i;
            }
        }
        System.out.println("偶数总和为:" + sum);

        // 计算5的阶乘
        int factorial = 1;
        for (int i = 1; i <= 5; i++) {
            factorial *= i;
        }
        System.out.println("5的阶乘为:" + factorial);

        // 输出乘法表
        int mul;
        for (int x = 1; x <= 9; x++) {
            for (int y = 1; y <= x; y++) {
                mul = x * y;
                String equation = String.format("%d × %d = %d", x, y, mul);
                System.out.print(equation + "\t");
            }
            System.out.println();
        }
    }
}

在这里插入图片描述

4. 循环结构的选择
循环嵌套
     ▶ while结构:循环的初始量和循环的更新改变不同
     ▶ do…while结构:循环的初始量和循环的更新改变相同
     ▶ for结构:一般与次数有关,即已知需要循环的次数
5. 循环的嵌套结构
是否与次数有关
     ▶ 循环中嵌套循环,多行多列(外层控制行,内层控制列)时使用
     ▶ 执行规则:外层执行一次时,内层执行一遍
     ▶ 建议:嵌套越少越好(能用一层不用两层,能用两层不用三层)
     ▶ break和continue:break默认只能跳出当前一层,continue用于跳过循环体中剩下的语句,进而执行下一次循环
  • 代码演示(小学+,-,*,/随机计算题,随机出题)
package bases;

import java.awt.geom.QuadCurve2D;
import java.text.DecimalFormat;
import java.util.Random;
import java.util.Scanner;

public class Demo04_Loop {
    public static void main(String[] args) {
        /*
         * 循环嵌套
         */
        Random random = new Random();
        Scanner scanner = new Scanner(System.in);
        // 随机运算出题
        int score = 0;
        System.out.print("请输入第一个数最大范围:");
        int num = scanner.nextInt();
        System.out.print("请输入第二个数最大范围:");
        int nums = scanner.nextInt();
        System.out.print("请输入出题数:");
        int number = scanner.nextInt();
        // 错题统计
        int f = 1;
        // 四舍五入保留一位小数decimalFormat.format(number);
        DecimalFormat decimalFormat = new DecimalFormat("#.#");
        System.out.print("提示:除法除不尽的保留一位小数,如4.55,保留后为4.6");
        for (int a = 1; a <= number; a++) {
            double n = random.nextInt(num);
            // 0不作除数
            double m = random.nextInt(nums) + 1;
            // 随机类型出题
            int types = random.nextInt(4) + 1;
            double result = 0.0;
            // 除法结果
            switch (types) {
                case 1:
                    System.out.printf("第%d题 题目:%s + %s = ?  ", a, decimalFormat.format(n), decimalFormat.format(m));
                    result = n + m;
                    break;
                case 2:
                    System.out.printf("第%d题 题目:%s - %s = ?  ", a, decimalFormat.format(n), decimalFormat.format(m));
                    result = n - m;
                    break;
                case 3:
                    System.out.printf("第%d题 题目:%s × %s = ?  ", a, decimalFormat.format(n), decimalFormat.format(m));
                    result = n * m;
                    break;
                case 4:
                    System.out.printf("第%d题 题目:%s ÷ %s = ?  ", a, decimalFormat.format(n), decimalFormat.format(m));
                    result = Double.parseDouble(decimalFormat.format((n / m)));
                    break;
            }
            System.out.print("请输入当前题目的答案:");
            double answer = scanner.nextDouble();
            if (result == answer) {
                System.out.println("恭喜你答对了!");
                score += 10;
                System.out.println("当前得分:" + score);
            } else {
                f += 1;
                System.out.println("哦!答错了哟,别灰心继续答下一个题");
                System.out.println("正确答案:" + result);
                System.out.println("f=" + f + "n=" + number);
                if (f > number) {
                    System.out.println("最后一题正确答案:" + result);
                    System.out.println("哦!竟然一个题都没答对");
                }
            }
        }
        System.out.println("本次得分:" + score);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一半不眠次日si记

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

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

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

打赏作者

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

抵扣说明:

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

余额充值