java for循环

①for循环

for(初始化语句;boolean表达式;循环后操作语句){

        循环体语句

}

初始化语句:只在开始循环时执行一次

boolean表达式:表达式为false是,循环终止,为true时,才执行循环体

循环后操作语句:循环每次迭代之后会调用该语句

②嵌套循环

2个人都从1数到3

        for(int count = 1;count <= 2; count ++){
            for(int num = 1;num <= 3;num ++){
                System.out.println("count:"+count+"=====num:"+num);
            }
        }
        /*
        * count:1=====num:1
        * count:1=====num:2
        * count:1=====num:3
        * count:2=====num:1
        * count:2=====num:2
        * count:2=====num:3
        * */

③嵌套循环性能优化

        for(int i = 0;i < 1000;i ++){
            for (int j = 0; j < 100; j++) {
                for (int k = 0; k < 10; k++) {
                    test(i,j,k);
                }
            }
        }

从代码上可以看到,无论如何优化,test的执行次数都是相同的,都是1000*100*10次

那么只能从循环变量i、j、k的实例化、初始化、比较、自增耗时方面进行分析,首先分析目前for循环的耗时情况

变量实例化(次数)初始化(次数)比较(次数)自增(次数)
i1110001000
j100010001000*1001000*100
k1000*1001000*1001000*100*101000*100*10

优化方案:减少实例化、初始化次数

        int i,j,k;
        for (i = 0; i < 10; i++) {
            for (j = 0; j < 100; j++) {
                for (k = 0; k < 1000; k++) {
                    test(i,j,k);
                }
            }        
        }
变量实例化(次数)初始化(次数)比较(次数)自增(次数)
i111010
j11010*10010*100
k110*10010*100*100010*100*1000

很明显可以看到,优化后:i、j、k的实例化次数都是1,初始化次数也减少了,所以在平常的for循环时尽量减少外层循环的循环次数;

输出矩形图案

*****

*****

*****

        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 5; j++) {
                System.out.print("*");
            }
            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 <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(i + "*" + j + "=" + i*j+"   ");
            }
            System.out.println();
        }

⑦for循环执行顺序

        for (sta1; sta2; sta3) {
            sta4
        }

①先执行sta1,做实例化和初始化;

②执行sta2,做条件判断,false/true;

③执行sta4,执行体;

④执行sta3,自增或自减;

⑤从第二步再次开始执行

⑧控制循环语句:break

求100以内,前5个3的倍数的值的和;

        int result = 0;
        int num = 0;
        for (int i = 1; i < 100; i++) {
            if(i % 3 == 0){
                result += i;
                System.out.println(i);
                num ++;
            }
            if(num == 2){
                break;
            }
        }
        System.out.println(result);

break:终止当前所在的循环,break之后的语句执行不了,对外层循环没有影响;

⑧控制循环语句:continue

        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 3; j++) {
                if(j==1){
                    continue;
                }
                System.out.println(j);//continue以后的代码不会执行
            }
            System.out.println(i);
        }

continue跳出当前循环,continue之后的代码不会执行,不影响外层循环

⑨控制循环语句:return

        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 3; j++) {
                System.out.println(j);
                if(j==1){
                    return;
                }
                System.out.println(j);//continue以后的代码不会执行
            }
            System.out.println(i);
        }

return终止当前方法,方法终止了所以return后面的代码也不会执行了

⑩控制外层循环

    private static void test6() {
        aa:for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 3; j++) {
                System.out.println(j);
                if(j==1){
                    break aa;
                }
            }
            System.out.println(i);
        }
    }

控制外层循环需要使用标签,就是给循环起个别名,别名满足标识符规则

若要控制外层循环,就在break、continue后面加上别名,如:break  <别名>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值