【JavaSE】- 程序控制结构(下)

1.1🍏多重循环的定义

  1. 将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for ,while ,do…while 均可以作为外层循环和内层循环。
    【建议一般使用两层,最多不要超过 3 层, 否则,代码的可读性很差】
  2. 实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为 false 时,才会完全跳出内
    层循环,才可结束外层的当次循环,开始下一次的循环[听不懂,走案例]。
  3. 设外层循环次数为 m 次,内层为 n 次,则内层循环体实际上需要执行 m*n

代码实现

public class MulFor01 {
    public static void main(String[] args) {
            for (int i = 0 ; i < 2 ; i++){
                for (int j = 0 ; j < 3 ; j++){
                    System.out.println("i = "+i +" j = "+j); // 0,0|0,1|0,2|1,0|1,1|1,2
                }
            }
    }

运行结果

1.2🥜多重循环练习题

  1. 统计 3 个班成绩情况,每个班有 5 名同学,求出各个班的平均分和所有班级的平均分[学生的成绩从键盘输入]。
  2. 统计三个班及格人数,每个班有 5 名同学。

代码实现

import java.util.Scanner;

public class MulForExercise01 {
    public static void main(String[] args) {
        // 统计 3 个班成绩情况,每个班有 5 名同学,求出各个班的平均分和所有班级的平均分[学生的成绩从键盘输入]。
        // 统计三个班及格人数
        Scanner myScanner = new Scanner(System.in);
        double sum = 0.0d;
        double score = 0.0d;
        double totalSum = 0.0d;
        int passPeople = 0;

        for (int i = 1 ; i<=3 ; i++) {
            sum = 0.0d;
            for (int j = 1; j <= 5; j++) {
                System.out.println("请输入第"+(i)+"个班第"+ (j) + "个同学的成绩:");
                score = myScanner.nextDouble();     // 记录每一位同学的成绩
                if (score>=60){
                    passPeople++;
                }
                sum += score;           // 记录每个班的总成绩
            }
            System.out.println("第"+(i)+"班的平均分为:"+(sum/5));
            totalSum += sum;         // 记录所有学生的总成绩
        }
        System.out.println("3个班总成绩为:"+(totalSum/15));
        System.out.println("3个班及格总人数为:"+passPeople);
    }
}

运行结果
在这里插入图片描述

代码实现

打印出九九乘法表

for(int i = 1 ; i<=9 ;i++){
            for(int j = 1 ; j<=i ; j++){
                System.out.print(j+"*"+i+" = "+(i*j)+"\t");
            }
            System.out.println();
        }

运行结果
在这里插入图片描述

打印金字塔

代码实现

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

运行结果
在这里插入图片描述

代码实现

        for (int i = 1 ; i<=6 ; i++){
            for (int j = 6 ; j>i ; j--){  // for(int j = 1 ; j<=(6-i) ;j++)
                System.out.print(" ");
            }
            for (int k = 2*i-1 ; k>=1 ; k--){
                System.out.print("*");
            }
            System.out.println();
        }

运行结果
在这里插入图片描述

代码实现

        int totalLevel = 10;        // 这里可以手动输出层数
        for (int i = 1 ; i<=totalLevel ; i++){
            for (int j = totalLevel ; j>i ; j--){
                System.out.print(" ");
            }

            // 当打印第1行和最后1行时全部输出,其他是打印第1个和最后1个时打印*
            // 否则打印空格
            for (int k = 2*i-1 ; k>=1 ; k--){
                if(i==totalLevel || k==2*i-1 || k==1){
                    System.out.print("*");
                }
                else{
                    System.out.print(" ");
                }
            }
            System.out.println();
        }

运行结果
在这里插入图片描述

打印空心菱形

代码实现

        Scanner myScanner = new Scanner(System.in);
        System.out.println("请输入层数");
        int totalLevel = myScanner.nextInt();       // 11/2 = 5

        for (int i = 1 ; i<=totalLevel/2 ; i++){
            for (int j = totalLevel/2 ; j>=i ;j--){
                System.out.print(" ");
            }
            for (int k = 1 ; k<=2*i-1 ; k++){
                if (k==2*i-1 || k==1){
                    System.out.print("*");
                } else{
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
        for (int i = totalLevel/2+1 ; i>=1 ; i--){   // 11/2+1 = 6
            for (int j = totalLevel/2+1 ; j>i ; j--){
                System.out.print(" ");
            }
            for (int k = 2*i-1 ; k>=1 ; k--){
                if (k==2*i-1 || k==1) {
                    System.out.print("*");
                }else{
                    System.out.print(" ");
                }
            }
            System.out.println();
        }

运行结果
在这里插入图片描述

2.1🥯break介绍

在这里插入图片描述

先来看一个案例

Math.random() -> 返回 [0,1) -> *100+1 -> [1,100)
Math.random()返回浮点数

代码实现

public class break01 {
    public static void main(String[] args) {
        for (int i = 1 ; i<=10 ; i++){
            // Math.random() -> 返回 [0,1) -> *100+1 -> [1,101)
            // Math.random()返回浮点数
            System.out.println((int)(Math.random()*100+1));
        }
    }
}

运行结果在这里插入图片描述

随机生成 1-100 的一个数,直到生成了 97 这个数,看看你一共用了几次?

代码实现

        int count = 0;
        while(true){
            int r = (int)(Math.random()*100+1);
            count++;
            System.out.println(r);
            if (r==97){
                break;
            }
        }
        System.out.println("为了生成97,共循环了"+count+"次");

运行结果
在这里插入图片描述

2.2🌰 break细节说明

在这里插入图片描述
在这里插入图片描述
代码实现

        // 求输出结果
        label1:
        for(int i = 0 ; i < 4 ; i++){
            label2:
            for(int j = 0 ; j < 10 ; j++){
                if (j == 2){
                    break label2 /*label1*/;
                }
                System.out.println("j = " + j);
            }
        }

运行结果
在这里插入图片描述

代码实现
在这里插入图片描述

运行结果
在这里插入图片描述

2.3🥕break练习题

  1. 1-100 以内的数求和,求出 当和 第一次大于 20 的当前数
  2. 实现登录验证,有 3 次机会,如果用户名为"丁真" ,密码"666"提示登录成功,否则提示还有几次机会,请使用 for+break

代码实现

        //1-100 以内的数求和,求出 当和 第一次大于 20 的当前数 【for + break】
        int s = 0;
        int n = 0;
        for (int i = 1; i <= 100; i++) {
            s += i;
            if (s > 20) {
                System.out.println("当和>20时,当前数为"+i);
                n = i;
                break;
            }
        }
        System.out.println("s=" + s);
        System.out.println("当和>20时,当前数为"+n);

运行结果
在这里插入图片描述

在写第2题前先引出一个常用的函数 -> equals()

代码实现

        String name = "小李";
        System.out.println(name.equals("小王"));
        System.out.println(name.equals("小李"));
        // 两种写法 这里可以避免空指针,下面写法更好
        System.out.println("小王".equals(name));
        System.out.println("小李".equals(name));

运行结果
在这里插入图片描述

代码实现

        Scanner myScanner = new Scanner(System.in);
        int chance = 3;
        for (int i = 1 ; i<=3 ;i++){
            System.out.println("请输入用户名和密码");
            String name = myScanner.next();
            String password = myScanner.next();
            if ("丁真".equals(name) && "666".equals(password)){
                System.out.println("登录成功~");
                break;
            }else{
                chance--;
                System.out.println("你还有"+(chance)+"次登录机会");
            }
        }

运行结果
在这里插入图片描述

3.1🍭continue介绍

  1. continue 语句用于结束本次循环,继续执行下一次循环。
  2. continue 语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环 , 这个和前面的标签的
    使用的规则一样.

在这里插入图片描述

在这里插入图片描述

3.2🍨continue细节

代码实现

        int i = 1;
        while(i<=4){
            ++i;
            if(i==2){
                continue;
            }
            System.out.println("i = "+ i);
        }

运行结果
在这里插入图片描述
代码实现

        label1:
        for(int j = 0 ; j < 2;j++){
            label2:
            for(int a = 0 ; a<10 ; a++){
                if(a == 2){
                	// 默认跳转最近的循环体
                    // continue;           -> 2组 |0,1,3,4,5,6,7,8,9
                    // continue label2;    -> 2组 |0,1,3,4,5,6,7,8,9
                     continue label1;    //-> 2组 | 0,1
                }
                System.out.println("a = "+ a);
            }
        }

运行结果
在这里插入图片描述

4.1🌮return说明

代码实现

        for(int i = 1 ; i<=5 ; i++){
            if(i==3){
                System.out.println("你好 "+i);
                return;		// 直接退出程序,也就是退出main方法
            }
            System.out.println("Hello");
        }
        System.out.println("程序继续...");

运行结果
在这里插入图片描述
注意
在这里插入图片描述

5.1🍬本章练习题

  1. 某人有100000元 ,每经过一次路口,需要交费
    (1)当现金>50000,每次交5%
    (2)当现金<=50000时,每次交1000
    该人可以经过多少路口?

分析有3种情况
(1) money > 50000
(2) money >= 1000 && money <= 50000)
(3) money < 1000

代码实现

        double money = 100000;
        int count = 0;
        while (true) {
            if (money > 50000) {
                 money *= 0.95; // money = money-money*0.05;
                count++;
            } else if (money >= 1000 /* && money<=50000 */) {
                money -= 1000;
                count++;
            } else {    // 钱不够了
                break;
            }
        }
        System.out.println("共经过" + count + "个路口");

运行结果
在这里插入图片描述

判断闰年

代码实现

        Scanner myScanner = new Scanner(System.in);
        System.out.println("请输入年份:");
         int year =  myScanner.nextInt();
         if(year % 400==0 || year%100!=0 && year % 4==0){
         	System.out.println(year+"是闰年");
         }
         else{
         	System.out.println(year+"是平年");
         }

运行结果
在这里插入图片描述

水仙花数

代码实现

        System.out.println("输入3位数判断是否为水仙花数:");
        Scanner myScanner = new Scanner(System.in);
        int flower = myScanner.nextInt();

        int ge = flower%10;
        int shi = flower%100/10;
        int bai = flower/100;

        int s = ge*ge*ge+shi*shi*shi+bai*bai*bai;

        if (s==flower){
            System.out.println("该数是水仙花数");
        }else {
            System.out.println("不是水仙花数");
        }

运行结果
在这里插入图片描述
练习题
在这里插入图片描述

输出1-100之间的不能被5整除的数,每五个一行

代码实现

        int count = 0;
        for (int i = 1; i <= 100; i++) {
            if (i % 5 != 0) {
                count++;  // 如果满足条件就加加
                System.out.print(i + " ");
                if (count % 5 == 0) {
                    System.out.println();
                }
            }
        }
        System.out.println("共"+count+"个数");

运行结果
在这里插入图片描述

输出小写的a-z以及大写的A-Z
小写:97 ~ 122
大写:65 ~ 90

代码实现

        for (char i = 97 ; i<=122 ;i++){
            System.out.print(i+" ");
        }
        System.out.println("\n====================================================");
        for (char i = 90 ; i>=65 ;i--){
            System.out.print(i+" ");
        }

运行结果
在这里插入图片描述

求出1-1/2+1/3-1/4…1/100的和

代码实现

        int a = 1; // 控制正负
        double s = 0;
        for (int i = 1 ; i<=100 ;i++){
            s += 1.0/(i*a);
            a *= -1;
        }
        System.out.println("和为:"+s);

运行结果
在这里插入图片描述

1 + (1+2) + (1+2+3) + (1+2+3+4) + … + (1+2+3+4+…+100)

代码实现

        // i可以表示第几项,同时也是当前项的最后一个数
        int s = 0;
        for (int i = 1 ; i<=100 ; i++){
            for (int j = 1 ; j<=i ; j++){  // 内存1~i进行循环
                s += j;
            }
        }
        System.out.println(s);

运行结果
在这里插入图片描述

在这里插入图片描述

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值