JavaSE从零学起8. Java循环结构详解:while循环,do…while循环,for循环及增强for循环

Java循环结构详解:while循环,do…while循环,for循环及增强for循环

while循环

while是最基本的循环,它的结构为:

while(boolean表达式){
    //循环内容
}

注意事项:

  1. 只要boolean表达式为true, 循环就会一直执行下去。
  2. 绝大多数情况下是需要让循环停止的,我们需要一个让表达式失效的方法来结束循环。
  3. 少数情况需要循环一直执行,比如服务器的请求响应监听等。
  4. 循环条件一直为true就会造成无限循环(死循环)。正常的业务编程中应该尽量避免死循环,这会影响程序性能或者造成程序卡死崩溃!、

看一个简单的例子:

输出1-100
public class Demo01 {
    public static void main(String[] args) {
        /*输出1-100*/
        int a = 0;
        while(a<100){ 
            a++;
            System.out.println(a);
        }
    }
}

输出结果
1
2
...
100
输出1+2+3+…+100的和:
public class Demo02 {
    public static void main(String[] args) {
        /*用while计算1+2+...+100=?*/
        int sum= 0;
        int a = 0;
        while(a<100){
            a = a+1;
            sum = sum + a;
        }
        System.out.println("The sum is" + sum);
    }
}

输出结果
The sum is 5050
用for循环输出1-1000之间能被5整除的数,且每行输出20个。
public class Demo03 {
    public static void main(String[] args) {
        /*用while循环输出1-1000之间能被5整除的数,且每行输出20个。*/
        int i=0;
        while(i<=1000){
            i++;

            if(i%5==0){
                System.out.print(i + "\t");
            }
            if(i%(5*20)==0){
                System.out.println();
            }

        }
    }
}

输出结果:
5	10	15	20	25	30	35	40	45	50	55	60	65	70	75	80	85	90	95	100	
105	110	115	120	125	130	135	140	145	150	155	160	165	170	175	180	185	190	195	200	
205	210	215	220	225	230	235	240	245	250	255	260	265	270	275	280	285	290	295	300	
305	310	315	320	325	330	335	340	345	350	355	360	365	370	375	380	385	390	395	400	
405	410	415	420	425	430	435	440	445	450	455	460	465	470	475	480	485	490	495	500	
505	510	515	520	525	530	535	540	545	550	555	560	565	570	575	580	585	590	595	600	
605	610	615	620	625	630	635	640	645	650	655	660	665	670	675	680	685	690	695	700	
705	710	715	720	725	730	735	740	745	750	755	760	765	770	775	780	785	790	795	800	
805	810	815	820	825	830	835	840	845	850	855	860	865	870	875	880	885	890	895	900	
905	910	915	920	925	930	935	940	945	950	955	960	965	970	975	980	985	990	995	1000	

do…while循环

对于while语句而言。如果不满足条件则不能进入循环。但有时候我们需要即使不满足条件也至少执行一次。

do…while语法:

do{
    //代码语句
}while(boolean表达式);

while和do…while的区别:

  1. while先判断后执行。do…while是先执行后判断。
  2. do…while总是保证循环体至少会执行一次!

看一个简单的例子:

输出1+2+3+…+100的和:(与上述while的例子对比)
public class DoWhileDemo01 {
        public static void main(String[] args) {
            /*用while计算1+2+...+100=?*/
            int sum= 0;
            int a = 0;
            do{
                a = a + 1;
                sum = sum + a;

            }while(a<100);

            System.out.println("The sum is" + sum);
        }
    }

输出结果:
The sum is 5050

可见此时输出结果并没有任何差别。

看一个更鲜明的例子:

对比while和do…while第一次的输出
public class DoWhileDemo02 {
    public static void main(String[] args) {
        int a = 0;
        while(a<0){
            a = a + 1;
            System.out.println(a);
        }//while先判断a<0,故而直接跳过循环,没有任何输出。
        System.out.println("===============");
        do{
            a = a + 1;
            System.out.println(a);

        }while(a<0) ;
        //do...while先执行了do{}语句后再进行判断。故而只执行了一次。输出1.
    }
}
输出结果:
===============
1

for循环

  • 虽然所有的循环结构都可以用while 或者do…while表示,但Java提供了另一种语句——for循环,使一些循环结构变得更加简单。
  • for循环是支持迭代的一种通用结构,是最有效、最灵活的循环结构。>
  • for循环执行的次数是在执行前就确定的。

语法格式:

for(初始化;布尔表达式;更新){
//代码语句
}
看一个while和for循环输出0-100的例子:
public class Demo01 {
    public static void main(String[] args) {
        int a = 0; //初始化条件

        while(a<100){
            System.out.println(a);
            a+=1;//迭代
        }
        System.out.println("While循环结束");

        //(初始化;条件判断;迭代)
        for (int i = 0; i <=100; i++) {//IDEA中可以直接100.for + Tab
            System.out.println(i);

        }
        System.out.println("for循环结束");

    }
}

输出结果:
0
1
...
100
While循环结束
    
0
1
...
100
for循环结束

for循环的运行过程:

  1. 最先执行初始化步骤。可以声明一种类型也可以是空语句。
  2. 然后检测boolean表达式的值。如果为true则循环体被执行。如果为false则循环终止,开始执行循环体后面的语句。
  3. 每执行一次循环后,更新循环控制变量(迭代因子控制循环变量的增减)。
  4. 再次检测boolean表达式。
  5. 循环执行以上过程

简单说来就是:

for(a.初始化;b.布尔表达式;c.更新)
d.//代码语句
}

e.//循环体后的语句

a.——b.——c.——b.——c…——e.

死循环:

既没有初始化,也没有判断语句。

for(;;){

}
计算0-100之间所有奇数与偶数的和。
public class Demo02 {
    public static void main(String[] args) {
        /*计算0-100之间所有奇数和偶数的和*/
        //先将0-100间的奇数与偶数都写出来
        int oddSum = 0;//保存奇数的和
        int evenSum = 0;//保存偶数的和

        for (int i = 0; i <=100; i++) {

            if(i%2!=0){
                oddSum = oddSum +i;
            }else {
                evenSum = evenSum +i;
            }
        }
        System.out.println("oddSum is" + oddSum);
        System.out.println("evenSum is" + evenSum);
        //再输出二者的和
        System.out.println("The sum of oddNum and evenNum is" + (oddSum + evenSum));
    }
}

输出结果:
oddSum is2500
evenSum is2550
The sum of oddNum and evenNum is5050
用for循环输出1-1000之间能被5整除的数,且每行输出20个。
public class Demo03 {
    public static void main(String[] args) {
        /*输出1-1000以内能被5整除的数且每行输出20个*/
        for (int i = 1; i <=1000; i++) {

            if(i%5==0){
                System.out.print(i+"\t");//因为我们要求每行输出固定个数所以不能直接用println()
                //= System.out.print(i) + System.out.print(" ");

                /*每行输出20个*/
                if (i%(5*20)==0){
                    System.out.println();
                    //= System.out.print("\n");

                }
            }
            /*println()输出完换行
            * print()输出完不换行
            * */
        }
    }
}

输出结果:
5	10	15	20	25	30	35	40	45	50	55	60	65	70	75	80	85	90	95	100	
105	110	115	120	125	130	135	140	145	150	155	160	165	170	175	180	185	190	195	200	
205	210	215	220	225	230	235	240	245	250	255	260	265	270	275	280	285	290	295	300	
305	310	315	320	325	330	335	340	345	350	355	360	365	370	375	380	385	390	395	400	
405	410	415	420	425	430	435	440	445	450	455	460	465	470	475	480	485	490	495	500	
505	510	515	520	525	530	535	540	545	550	555	560	565	570	575	580	585	590	595	600	
605	610	615	620	625	630	635	640	645	650	655	660	665	670	675	680	685	690	695	700	
705	710	715	720	725	730	735	740	745	750	755	760	765	770	775	780	785	790	795	800	
805	810	815	820	825	830	835	840	845	850	855	860	865	870	875	880	885	890	895	900	
905	910	915	920	925	930	935	940	945	950	955	960	965	970	975	980	985	990	995	1000	
打印九九乘法表
样式:
1*1=1 
1*2=2 2*2=4 
1*3=3 2*3=6 3*3=9 
1*4=4 2*4=8 3*4=12 4*4=16 
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 

思考过程:

  1. 打印第一列。发现每个式子其实就是1*行数i
  2. 我们发现第二列第三列到第九列依次是列数*i 因此想到列数j与行数i可做循环的嵌套。每个式子其实就是j*i.
  3. 又因为格式中列数<=行数,即j<=i 。故而想到
for (int i = 1; i < 10; i++) {
            for(int j = 1; j<=i ;j++){
                System.out.print(j+"*"+i +"=" + (j*i) +" ");
            }       
        }
  1. 最后调整样式:每两个式子中间有空格.另外i每次循环到9后要换行。
 for (int i = 1; i < 10; i++) {
     for(int j = 1; j<=i ;j++){
         System.out.print(j+"*"+i +"=" + (i*j) +" ");
     }
     System.out.println();
 }
  1. 最后实现完整代码:
public class Demo04 {
    public static void main(String[] args) {
        /*打印九九乘法表*/
        for (int i = 1; i < 10; i++) {
            for(int j = 1; j<=i ;j++){
                System.out.print(j+"*"+i +"=" + (j*i) +" ");
            }
            System.out.println();
        }
    }
}

输出结果:
1*1=1 
1*2=2 2*2=4 
1*3=3 2*3=6 3*3=9 
1*4=4 2*4=8 3*4=12 4*4=16 
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 

增强型for循环

Java5引入了一种主要用于数组或集合的增强型for循环。

增强型for循环语法格式如下:

for(声明语句:表达式){
    //代码句
}
  • 声明语句:声明新的局部变量,该变量类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
  • 表达式:表达式是要访问的数组名或是返回值为数组的方法。
看个简单的例子体验一下for和增强for的关联:
public class Demo05 {
    public static void main(String[] args) {
        //定义了一个数组
        int[] num = {1,2,3,4,5};

        //遍历数组的元素
        //for(声明语句与数组元素的类型匹配:表达式是访问的数组名或返回值为数组的方法)
        for(int x:num){
            System.out.println(x);
        }

        System.out.println("=============");

        for (int i = 0; i < 5; i++) {
            System.out.println(num[i]);
        }
    }
}

输出结果:
1
2
3
4
5
=============
1
2
3
4
5

break和continue

  • break用于控制循环的流程,可用于任何循环语句的主体部分。break用于强行退出循环,不执行循环中剩余的语句。(break语句也在switch语句中使用)
  • continue语句用在循环语句体中用于终止某次循环过程。即跳过循环体中尚未执行的语句,直接进入下一次执行循环的判定。

看一个break的例子:

输出0-30之间的数
public class BreakDemo {
    public static void main(String[] args) {
        int i = 0;
        while (i<100){
            i++;
            System.out.println(i);
            if (i==30){
                break;
            }
        }
    }
}

输出结果:
1
2
3
...
30

看一个continue的例子:

跳过整十数输出1-100:
public class ContinueDemo {
    public static void main(String[] args) {
        int i = 0;
        while (i<100){
            i++;
            if (i%10==0){
                System.out.println();//每当循环到10的倍数就会换行
                continue;
//continue直接跳过了System.out.print(i)的执行,直接进入下一次循环的判定。
// 故而每次遇到10的倍数就不会输出。每一行最多输出到9
            }
            System.out.print(i + " ");
        }
    }
}

输出结果:
1 2 3 4 5 6 7 8 9 
11 12 13 14 15 16 17 18 19 
21 22 23 24 25 26 27 28 29 
31 32 33 34 35 36 37 38 39 
41 42 43 44 45 46 47 48 49 
51 52 53 54 55 56 57 58 59 
61 62 63 64 65 66 67 68 69 
71 72 73 74 75 76 77 78 79 
81 82 83 84 85 86 87 88 89 
91 92 93 94 95 96 97 98 99 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Clap of thunder

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

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

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

打赏作者

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

抵扣说明:

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

余额充值