循环的操作及应用

1.dowhile循环
1.1 dowhile循环语法
//与while循环的区别是,dowhile循环是先执行代码,再进行判断;至少要执行一次
/*
 * 语法结构:
 * 初始化语句;
 * do{
 *    要执行的代码;
 *    增量语句
 * }while(条件判断);
 * 
 * 执行流程:
 * 1.执行初始化语句(只执行一次)
 * 2. 执行循环体语句
 * 3. 执行增量语句
 * 4. 条件判断,如果成立,则继续执行第二条;如果不成立,则直接退出循环
 * 
 * 案例: 打印10次"helloworld"
 * 
 * */
 

public class DoWhile1 {
    public static void main(String[] args) {
        int i = 1;
        do {
            System.out.println("helloworld..."+i);
            i++;
        }while(i<=10);
    }
}


1.2 dowhile应用场景:
//案例:学生先写完作业,老师进行评语,如果评语为'y',则继续抄写作业;如果为'n',则不用抄写了
public class DoWhile2 {
    public static void main(String[] args) {
        //while循环:
        /*
        System.out.println("学生正在抄写作业...");
        System.out.println("学生抄写作业完成....");
        System.out.println("学生是否需要继续抄写作业? 请老师给评语:");
        Scanner scanner = new Scanner(System.in);
        char flag = scanner.next().charAt(0); //从控制台接收第一个字符
        while(flag=='y') {
            System.out.println("学生正在抄写作业...");
            System.out.println("学生抄写作业完成....");
            System.out.println("学生是否需要继续抄写作业? 请老师给评语:");
            flag = scanner.next().charAt(0); //继续接收录入的值
        }*/
        
        //dowhile循环:
        Scanner scanner = new Scanner(System.in);
        char flag;  //用于接收录入的值
        do {
            System.out.println("学生正在抄写作业...");
            System.out.println("学生抄写作业完成....");
            System.out.println("学生是否需要继续抄写作业? 请老师给评语:");
            flag = scanner.next().charAt(0);
        }while(flag=='y');
        System.out.println("结束抄写作业..");
        
        //while  VS  dowhile
        //while: 先判断,后执行; 执行次数为0~n次; 用在循环次数可预见(打印10次helloworld)
        //dowhile:先执行,后判断;执行次数为1~n次;用在循环次数不可预见
    }
}

2. for循环(重点)
2.1 for循环语法结构
//for循环结构
/*
 * for(初始化语句;条件判断;增量语句){
 *        循环体语句;
 * }
 * 
 * 执行流程:
 * 1.初始化语句
 * 2.条件判断  如果成立,则执行循环体语句;不成立,则跳出循环
 * 3.执行循环体语句
 * 4.增量语句;  执行完后再回到第2句,条件判断
 * 
 * 说明: for执行流程与while是一致的,只是写法上的区别;推荐用for,在循环嵌套中,结构更清晰
 * 
 * 案例:打印10遍“好好学习,天天向上”
 * 
 * 语法特点及执行流程,与while一致:
 * 先判断,后执行;执行次数是0~n次;用在循环次数可预见
 * 
 */
public class For1 {
    public static void main(String[] args) {
        int i=1;  //如果后面需要使用i变量,可以提取到前面(一般不会这么做)
        for(;i<=10;i++) {
            System.out.println("好好学习,天天向上.."+i);
        }
        System.out.println(i);
    }
}


2.2 for案例2
//案例2: 从控制台输入一个正整数n(小于10),求出该数的阶乘
public class For2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个正整数:");
        int n = scanner.nextInt();
        int sum = 1;
        for(int i=1;i<=n;i++) {
            sum *= i;
        }
        System.out.println(n+"的阶乘为:"+sum);
    }
}


2.3 for案例3
//案例3:从控制台录入5名学生的成绩,请求出他们的平均分
//分析:循环录入5次,汇总成绩,除以5
public class For3 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double sum = 0;  //记录汇总的值
        for(int i=1;i<=5;i++) {
            System.out.println("请输入第"+i+"个学生成绩:");
            int score = scanner.nextInt();
            sum += score;  //汇总分数
        }
        System.out.println("平均分:"+sum/5);
    }
}


3. 循环控制语句(重点)
3.1 循环控制概述
//循环控制语句(控制循环的退出): break,continue
//break:前面用在switch中,就是跳出switch;在循环中,表示跳出循环
//continue:跳出当次循环,不影响下一次循环的执行
//案例1:循环1~10,遇到5,则直接退出;  打印: 1, 2,3,4----->break
//案例2:循环1~10,遇到5,则跳过当次执行;  打印:1,2,3,4,6,7,8,9,10-->continue
public class Break1 {
    public static void main(String[] args) {
        for(int i=1;i<=10;i++) {
            if(i==5) {
                //break;  //跳出循环
                continue; //跳出当次循环,不影响下一次循环的执行
            }
            System.out.print(i+" ");
        }
        System.out.println("\n程序结束...");
    }
    
    //循环控制语句的应用场景:
    //1.用在特殊的退出判断中,例如上述的案例
    //2.结合死循环使用  break+死循环
}


3.2 死循环案例
//各种死循环的认识:
public class Break2 {
    public static void main(String[] args) {
        //1.for的死循环:
        /*
        for(;;) {
            System.out.println("for的死循环...");
        }*/
        //2.while的死循环:
        /*
        while(true) {
            System.out.println("while的死循环...");
        }*/
        //3.dowhile的死循环:
        do {
            System.out.println("dowhile的死循环");
        }while(true);
        //说明:死循环往往常用while和dowhile,死循环的结构会更好;
        //尤其是dowhile,因为死循环往往循环次数不可预见
        
        //三种循环的应用场景:
        //1.先判断,后执行;循环次数明确--使用for,while用在死循环
        //2.先执行后判断;循环次数不明确--dowhile(及死循环中)
    }
}

3.3 break+死循环
//死循环案例:学生抄写作业,老师给出评语:‘y'则继续抄写,’n‘则结束抄写
public class Break3 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        do {
            System.out.println("学生正在抄写作业..");
            System.out.println("抄写作业完成..");
            char flag = scanner.next().charAt(0); //控制台录入
            if(flag!='y') { //不等于y,则结束;等于y则继续
                break;
            }
        }while(true);
        
        System.out.println("抄写作业结束..");  //只要有出口,就不是不可到达的代码了
    }
}

4. 循环嵌套(重点)
4.1 循环嵌套语法结构
//循环嵌套:循环中包含循环(一般使用for嵌套)
/*
 * 嵌套语法结构
 * for(初始化语句1;条件判断1;增量语句1){
 *       for(初始化语句2;条件判断2;增量语句2){
 *       循环体语句2;
 *    }
 * }
 * 
 * 执行流程:
 * 1.初始化语句1(只执行一次)
 * 2.条件判断1,如果成立,进入到内层循环
 * 3.进入内层循环
 *   3.1 初始化语句2
 *   3.2 条件判断2,如果成立则执行循环体语句2;如果不成立,则调到增量语句1
 *   3.3 执行循环体语句2
 *   3.4 增量语句2,再进入条件判断2,直到不成立为止
 * 4.增量语句1,在进入条件判断1,依次循环
 * 
 * */
//案例:打印3行5列的“*”
//问题分解: 考虑先打印1行5列
public class QianTao1 {
    public static void main(String[] args) {
        /*
        System.out.println("*****");
        System.out.println("*****");
        System.out.println("*****");
        */
        for(int i=1;i<=3;i++) { //外层打印行
            //打印1行5列
            for(int j=1;j<=5;j++) {  //内层打印列
                System.out.print("*");
            }
            System.out.println();   //换行
        }
    }
}


4.2 循环嵌套案例
//案例2:计算3个班,每个班5名同学的平均分
//分析:先计算第1个班5名同学;3个班就表示3行5列的结构
public class QianTao2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        for(int i=1;i<=3;i++) { //3个班代表3行
            double sum = 0;  //汇总每个班的总和
            for(int j=1;j<=5;j++) { //5名同学代表5列
                System.out.println("请输入第"+i+"个班,第"+j+"个同学的成绩");
                int score = scanner.nextInt();
                sum += score; //汇总每个班的5名成绩
            }
            System.out.println("第"+i+"个班的平均分为:"+sum/5);
        }
        
    }
}


4.3 打印直角三角形
//案例:打印直角三角形
/*
 *例如:
 *    *
 *    **
 *    ***
 *    ****
 * 
 * 分析:4行4列*; 行是确定的, 第一行,打印1列,意味着,j随着i的变化而变化
 */
public class QianTao3 {
    public static void main(String[] args) {
        for(int i=1;i<=4;i++) { //4行
            for(int j=1;j<=i;j++) {
                System.out.print("*");
            }
            System.out.println();  //换行
        }
    }
}


4.4 打印等腰三角形
//案例4:打印等腰三角形
/*
 * 例如:
 *     *
 *     ***
 *     *****
 *     ******* 
 * 再转换:
 *        *
 *       ***
 *      *****
 *     *******    
 *  
 *  分析:1. 行固定,列再找规律,随着行的变化而变化; 打印1 3 5 7 列
 *      2. 再推空格变为等腰对称的*
 *      
 *  扩展分析: 打印菱形  --再等腰三角形的基础上,再打印倒的等腰三角形  
 *    *****
 *    ***
 *    *
 *     
 *    *****
 *     ***
 *      *  
 *      
 */
public class QianTao4 {
    public static void main(String[] args) {
        //打印等腰三角形
        for(int i=1;i<=4;i++) {
            //第一行打印3个空格,第二行2个,第三行1个
            for(int j=1;j<=4-i;j++) {
                System.out.print(" ");  //打印空格
            }
            
            for(int j=1;j<=2*i-1;j++) {  //带入值,找规律
                System.out.print("*");
            }
            System.out.println(); //换行
        }
        
        //打印倒着的等腰三角形
        for(int i=1;i<=3;i++) {
            //推空格
            for(int j=1;j<=i;j++) {
                System.out.print(" ");
            }
            
            //打印*
            for(int j=1;j<=7-2*i;j++) {
                System.out.print("*");
            }
            System.out.println();  //换行
        }
    }
}

5. break的练习
5.1 switch+dowhile的break使用
//练习1:自动取款机的案例
//分析:欢迎使用取款机的提示一直循环,需要写一个死循
public class Exec1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        do{
            System.out.println("欢迎使用取款机:");
            System.out.println("1.开户 2.存款 3.取款 4.转账 5.查询余额 6.修改密码 0.退出");
            int num = scanner.nextInt();
            //使用switch等值判断
            switch (num) {
            case 1:
                System.out.println("开户成功!");
                break;
            case 2:
                System.out.println("存款成功!");
                break;
            case 3:
                System.out.println("取款成功!");
                break;
            case 4:
                System.out.println("转账成功!");
                break;
            case 5:
                System.out.println("查询成功,余额为100万");
                break;
            case 6:
                System.out.println("修改密码成功!");
                break;
            case 0:
                System.out.println("退出!");
                break;
            default:
                System.out.println("输入有误,请重新输入");
                break;
            }
            
            if(num==0) { //跳出switch之后,需要继续判断num是否为0,为0则跳出死循环
                break;
            }
        }while(true);
        
        System.out.println("---执行退出功能---");
    }
}

5.2 循环嵌套中的break的使用
//扩展案例:在循环嵌套中使用break的案例
//案例:循环打印3行5列的1到5,如果遇到3后,每行后面的值都不打印
/*
 * 分析,先打印3行5列的数值:
 * 1 2 3 4 5
 * 1 2 3 4 5
 * 1 2 3 4 5
 * 
 * 再打印判断break的循环:
 * 1 2
 * 1 2
 * 1 2
 * 
 * 
 * 结论:
 * break用在循环嵌套中,只退出离它最近的一层循环
 * 在switch+循环中,break也是退出一层流程控制语句
 * 
 */

public class Exec2 {
    public static void main(String[] args) {
        for(int i=1;i<=3;i++) {
            for(int j=1;j<=5;j++) {
                if(j==3) {
                    break; //在循环嵌套中,break退出离它最近的一层循环
                }
                System.out.print(j+" ");
            }
            System.out.println();  //回车
        }
    }
}


总结梳理:
 


作业:
1. 老王记不清自己家电子门密码,多次尝试输入密码,直到正确为止
   提示:录入密码为整数类型的值
2. 对录入的分数进行判断。如果小于0大于100,标记出错状态,并立即跳出整个循环
   死循环+break;  
3. 循环录入Java课的5个学生成绩,统计分数大于等于80分的学生比例
   提示:比例按小数打印即可,例如: 两个人大于80分--0.4
4. 循环录入3个班的5个学生成绩,统计每个班分数大于等于80分的学生比例
5. 打印99乘法表
    1*1=1
    1*2=2 2*2=4
    1*3=3 2*3=6 3*3=9
    ...
    提示: 直角三角形,变化i和j的值 
6. 每日必备单词:
1.bug [ bʌg ]错误                      2.debug [ di:'bʌg ]调试                      
3.continue [ kən'tinju: ]继续           4.launch [lɔːntʃ] 发行,运行
5.while [ (h)wail ] 当..时候            6.do [ dəu ]执行          
7. create [kriˈeɪt] 创建                 8.  problem [ˈprɒbləm] 问题
9. terminate [ˈtɜːmɪneɪt] 终止               10. value [ˈvæljuː] 值
11. loop [luːp] 循环                        12. nest [nest] 嵌套
13. flag [flæɡ] 标记                       14. exit [ˈeksɪt] 退出

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值