Java - for循环,嵌套循环,一些循环结构的练习,跳转语句break和continue

c) for 循环

while、do...while:一般用在循环次数不固定的情况,结构松散;

for:用在循环次数固定的情况,结构紧密。

语法

for(循环变量初始化;循环条件;循环变量迭代) {
    循环体;
}

流程图

image

1.循环变量初始化 -> 2.循环条件 -> 3.循环体语句 -> 4.循环变量迭代 -> 重复2,3,4

案例

package demo;

import java.util.Scanner;

public class Test03 {
    //编写一个main方法
    public static void main(String[] args) {
        //循环输入某同学结业考试的5门课成绩,并计算平均分
        Scanner input = new Scanner(System.in);
        double sum = 0;//定义变量sum,用来求和
        for(int i = 1; i <= 5; i++){
            //定义变量 score 接收用户输入成绩
            System.out.print("输入第" + i + "门课程的成绩:");
            double score = input.nextDouble();
            sum += score;
        }
        double avgScore = sum / 5; //定义变量 avgScore ,用来计算平均分
        System.out.println("这5门课程的平均分是:" + avgScore);

    }

}

注意

; 号必须写

循环四要素不一定非得写在 () 中

嵌套for循环

双层循环:在一个循环,再嵌套另一个循环

外层循环一次,内层循环一遍

案例:用*打印5×5的矩形

for (int i = 1; i <= 5; i++){
    //打印5个*
    for (int j = 1; j <= 5; j++){
        System.out.print("*");
    }
    //换行
    System.out.println();

打印直角三角形:

for (int i = 1; i <= 5; i++){
    //外层每次循环,内层循环次数会随 i 改变而改变,需要观察内层循环条件是怎样发生改变的
    for(int j = 1; j <= 2 * i - 1; j++){
        System.out.print("*");
    }
    //换行
    System.out.println();
}

4.4、跳转语句

2)、break

当break出现在循环语句中,作用是跳出当前循环语句,结束当前循环执行后面的代码

在switch ...case 语句中,break 表示跳出当前选择结构

案例

当变量x的值为3时,使用break语句跳出循环。

int x = 1;
while (x <= 4) {
    System.out.println("x = " + x);
    if (x == 3) {
        break; //跳出循环
    }
    x++;
}

打印结果只到了 x = 3;并没有出现"x = 4"

练习

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

import java.util.Scanner;

public class Test05 {
    //编写一个main方法
    public static void main(String[] args) {
        //循环录入某学生5门课的成绩并计算平均分,
        //如果某分数录入为负数,停止录入并提示录入错误,且不再显示平均分
        Scanner input = new Scanner(System.in);
        double sumScore = 0;
        boolean flag = true;
        for(int i = 1; i <= 5; i++ ){
            //定义一个score变量接收用户输入的成绩
            System.out.print("请输入第" + i + "门课的成绩:");
            double score = input.nextDouble();
            sumScore += score;
            //判断
            if(score < 0){
                System.out.println("录入错误");
                flag = false;
                break;
            }

        }
        if (flag){
            double avgScore = sumScore / 5;
            System.out.println("五门课平均分:" +  avgScore);
        }
    }
}

此题中需要让 break 语句执行时跳出循环,并且不输出平均分了。

思考:平均分的输出在 for 循环外面,break 并不能终止循环外面的语句

解决:定义一个 boolean变量 标记,执行break前把这个布尔值改为false,平均分的输出用 if 选择语句,判断条件就是这个布尔变量

3)、continue

continue语句只能用在循环语句中,它的作用是结束本次循环,继续执行下一次循环。(跳过)

案例

求1~100的奇数和

//用continue跳过偶数
int sum = 0; // 定义变量sum,用于记住和
for (int i = 1; i <= 100; i++) {
    if (i % 2 == 0) { // i是一个偶数,不累加
        continue; // 结束本次循环
    }
    sum += i; // 实现sum和i的累加
}
System.out.println("sum = " + sum);

4.5、综合练习

使用while循环,求n的阶乘,n由控制台自行输入

package homework;

import java.util.Scanner;

public class Topic01 {
    //编写一个main方法
    public static void main(String[] args) {
        //使用while循环,求n的阶乘,n由控制台自行输入
        Scanner input = new Scanner(System.in);
        String answer = "y";
        while (answer.equals("y")){
            System.out.print("输入你想求阶乘的整数:");
            int n = input.nextInt(),result = 1;
            int i = 1;
            while (i <= n){
                result *= i;
                i++;
            }
            System.out.println(n + "的阶乘为:" + result);
            System.out.print("你还想求别的数的阶乘吗(y/n)?");
            answer = input.next();
        }


    }
}

输入行数打印出空心菱形

package demo;

import java.util.Scanner;

public class Practice01 {
    //打印一个main方法
    public static void main(String[] args) {
        //输入行数打印出空心菱形
        Scanner input = new Scanner(System.in);
        String res = "y";
        while(res.equals("y")){
            System.out.println("请输入行数(奇数):");
            int num = input.nextInt(), onNum = (num + 1) / 2;
            //循环打印
            for (int i = 1; i <= onNum; i++) {
                //打印空格
                for (int j = onNum - 1; j >= i; j--) {
                    System.out.print(" ");
                }
                System.out.print("*");
                //打印 *
                for (int c = 2; c < 2 * i - 1; c++) {
                    System.out.print(" ");
                }
                if (i > 1) {
                    System.out.print("*");
                }

                //换行
                System.out.println();
            }
            //下半部
            //5行
            //空格:j=1,j<i,j++;*:9,7,5,3,1.c=9.c>=2i-1.c--
            for (int i = 1; i <= onNum - 1; i++) {
                //打印空格
                for (int j = 1; j <= i; j++) {
                    System.out.print(" ");
                }
                System.out.print("*");
                //打印 *
                for (int c = (onNum - 2) * 2 - 1; c >= 2 * i - 1; c--) {
                    System.out.print(" ");
                }
                if (i < onNum - 1) {
                    System.out.print("*");
                }
                //换行
                System.out.println();

            }
            System.out.print("是否继续玩玩?(y/n):");
            res = input.next();
        }

    }
}

求这样一个三位数,该三位数等于其每位数字的阶乘之和(145=1!+4!+5!)

//求这样一个三位数,该三位数等于其每位数字的阶乘之和145=1!+4!+5!
        //100~999,
        for (int i = 100; i <= 999; i++){
            int a,b,c,x = 1,y = 1,z = 1; //定义百位,十位,各位,百位阶乘,十位阶乘,个位阶乘
            //求出百位,十位,个位数字
            a = i / 100;
            b = i / 10 % 10;
            c = i % 10;
            //求百位阶乘
            for (int j = 1; j <= a;j++){
                x *= j;
            }
            //求十位阶乘,0的阶乘为0
            if (b != 0){
                for (int j = 1; j <= b;j++){
                    y *= j;
                }
            }else {
                y = 0;
            }
            //求个位阶乘,0的阶乘为0
            if (c != 0){
                for (int j = 1; j <= c;j++){
                    z *= j;
                }
            }else {
                z = 0;
            }
            //判断是否满足该三位数等于其每位数字的阶乘之和
            if (i == x + y + z){
                System.out.println(i);
            }
        }

输出打印100-1000之间所有的水仙花数,要求每行输出2个,并统计一共有多少个

//输出打印100-1000之间所有的水仙花数,要求每行输出2个,并统计一共有多少个
        int count = 0,number = 0,a,b,c,sum;
        for (int i = 100; i < 1000; i++){
            a = i / 100;
            b = i / 10 % 10;
            c = i % 10;
            sum = a * a * a + b * b * b + c * c * c;
            if (i == sum){
                count++;
                number++;
                System.out.print(i + "\t");
                if (number %2 == 0){
                    System.out.println();
                }
            }
        }
        System.out.println("\n100~999之间一共有" + count + "个水仙花数");

按需求完成指定功能,题目如下:
模拟登录,给三次机会,并提示还有几次机会

  1. 假设用户名和密码均为admin,如果输入正确,控制台输出:欢迎admin登录
  2. 如果输入错误,控制台输出:录入错误,您还有2次机会(最多有3次机会)
package homework;

import java.util.Scanner;

public class Topic10 {
    //编写一个main方法
    public static void main(String[] args) {
        //模拟登录,给三次机会,并提示还有几次机会
        //1.假设用户名和密码均为admin,如果输入正确,控制台输出:欢迎admin登录
        //2.如果输入错误,控制台输出:录入错误,您还有2次机会(最多有3次机会)
        //创建变量接收用户输入
        Scanner input = new Scanner(System.in);
        int countUsername = 3; //用户名初始输入机会为3
        boolean flag = true; //标记
        for (int i = 1; i <= 3; i++){
            System.out.print("请输入用户名:");
            String userName = input.next();
            countUsername--; //每输入一次,机会减 1
            if (!userName.equals("admin")){
                System.out.println("用户名录入错误,您还有" + countUsername + "次机会");
                if (countUsername > 0){ //判断是否还有机会
                    continue; //有机会开始下一次输入
                }else {
                    break; //没机会就终止输入
                }
            }else {
                int countPwd = 3;
                for (int j = 0; j <= 3; j++){
                    System.out.print("请输入密码:");
                    String pwd = input.next();
                    countPwd--;
                    if (!pwd.equals("admin")){
                        System.out.println("密码录入错误,您还有" + countPwd + "次机会");
                        if (countPwd > 0){ //判断是否还有机会
                            continue; //有机会开始下一次输入
                        }else {
                            flag = false;
                            break; //没机会就终止输入
                        }
                    }
                }
            }
        }
        if (flag == false){
            return;
        }

    }
}

按需求完成指定功能,题目如下:
键盘录入一个字符串,统计该字符串中大写字母字符,小写字母字符,数字字符出现的次数,其他字符出现的次数。
例如键盘录入:ABCDEabcd123456!@#$%^;

输出ABCDEabcd123456!@#$%^中大写字母有:5个,小写字母有:4个,数字字符:6个,其他字符有:6个

package homework;

import java.util.Scanner;

public class Topic11 {
    //编写一个main方法
    public static void main(String[] args) {
        //键盘录入一个字符串,统计该字符串中大写字母字符,小写字母字符,数字字符出现的次数,其他字符出现的次数。
        //	例如键盘录入:ABCDEabcd123456!@#$%^
        //	输出:ABCDEabcd123456!@#$%^中大写字母有:5个,小写字母有:4个,数字字符:6个,其他字符:6个
        //创建变量接收用户输入
        Scanner input = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String str = input.next();
        int bigCount = 0,smallCount = 0,figureCount = 0,otherCount = 0;//定义各种字符的个数
        //遍历 str 的每一个字符
        for (int i = 0; i < str.length(); i++) {
            char ch = str.charAt(i); //根据每一个字符的角标来依次显示各个字符
            int num = (int) ch; //定义一个整数型变量number,用强转来显示字符所对应的 ASCll 码
            if (num >= 65 && num <= 90){ //A-Z对应的 ASCLL 码为 65-90
                bigCount++;
            }else if (num >= 97 && num <= 122){ //a-z 对应的 ASCLL 码为 97-122
                smallCount++;
            }else if (num >= 48 && num <= 57) { //数字 0-9 对应的 ASCLL 码为 48-57
                figureCount++;
            }else {
                otherCount++;
            }
        }
        System.out.println(str + "中大写字母有:" + bigCount + "个,小写字母有:" + smallCount +
                "个,数字字符有:" + figureCount + "个,其他字符有:" + otherCount + "个");

    }
}

posted @   Thecong  阅读(332)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示