首页 > 编程语言 > 详细

JAVA流程控制——循环结构

时间:2020-09-13 09:26:59      阅读:43      评论:0      收藏:0      [点我收藏+]

循环结构

相同操作执行多次

  • while循环结构
  • do...while循环
  • for循环
    • 数组增强型for循环(Java5引入)

一、while循环

最基本的循环结构

while (布尔表达式){
    //循环内容
}
  • 只要布尔表达式为true,循环就一直会执行下去
  • 大多数情况下,想停止循环需要以表达式失效的方式
  • 少部分循环需要一直执行,如服务器的请求响应监听
  • 循环条件一直为true会造成无限循环(死循环),正常编程应尽量避免,会影响程序性能或造成程序卡死奔溃
package com.Shelton.struct;

public class WhileDemo02 {
    public static void main(String[] args) {
		//输出1~100
        int i = 0;

        while(i<100){
            System.out.println(++i);
        }
    }
}
package com.Shelton.struct;

public class WhileDemo03 {
    public static void main(String[] args) {
        //1+2+3+...+100= ?
        int i = 0;
        int sum = 0;

        while (i<100){
            sum = ++i + sum;
        }

        System.out.println(sum);
    }
}

二、 do...while

1. 语法

do {
    //代码语句
}while();
  • 效果同while
  • while若不满足条件,不进入循环,而do...while不满足条件会执行一次
package com.Shelton.struct;

public class DoWhileDemo01 {
    public static void main(String[] args){
        //1+2+3+...+100= ?
        int i = 0;
        int sum = 0;

        do {
            sum = sum + i;
            i++;
        }while(i<100);

        System.out.println(sum);
    }
}
package com.Shelton.struct;

public class DoWhileDemo02 {
    public static void main(String[] args) {
        int a = 0;
        while (a<0){
            System.out.println(a);//不执行
            a++;
        }
        System.out.println("==================");
        do {
            System.out.println(a);
            a++;
        }while (a<0);
    }
}
/*
=================
        0
*/

三、for※

能使循环结构变得更简单,for是支持迭代的一种通用结构,是最有效、最灵活的循环结构

1. 语法

for(初始化;布尔表达式;更新){
    //代码语句
}
  1. 最先初始化的步骤,可以声明一种类型,但可初始化一个或多个循环控制变量,也可是空语句
  2. 然后检测布尔值,如果true执行循环体,false直接执行循环体后面的语句
  3. 执行一次循环后,更新循环控制变量(迭代因子控制循环变量的增减)
  4. 再次检测布尔表达式,循环执行上述过程
package com.Shelton.struct;

public class ForDemo01 {
    public static void main(String[] args) {
        int a = 1;//初始化条件

        while (a<=6){
            System.out.println(a);//循环体
            a+=2;//迭代——每一次循环a = a + 2都会将a的值刷新
        }
        System.out.println("while循环结束!");
        //  初始化  条件判断 迭代
        for (int i=1;i<=6;i++){
            System.out.println(i);
        }
        System.out.println("for循环结束!");
    }

}
/*
        1
        3
        5
        while循环结束!
        1
        2
        3
        4
        5
        6
        for循环结束!
*/

2. 死循环

for (; ;){}

3. 练习

练习1
package com.Shelton.struct;

public class ForDemo02 {
    public static void main(String[] args) {
        //计算0~100v之间奇数和偶数的和
        int i = 1;
        int ji = 0;
        int ou = 0;
//0 2 4 6 8 .......98 100
//1 3 5 7 9 .......97 99
        for (i=1;i<=50;i++){
            ji = 2*i-1 + ji;
            ou = 2*i + ou;
        }
        System.out.println("奇数和为"+ji);
        System.out.println("偶数和为"+ou);
    }
}
改进
package com.Shelton.struct;

public class ForDemo03 {
    public static void main(String[] args) {

        int oddSum = 0;//even number 是偶数 odd number 是奇数
        int evenSum = 0;

        for (int i = 0; i <= 100; i++) {
            if (i % 2 != 0) {//将奇数偶数分开,偶数/2余数为0,不为0的分另一组
                oddSum += i;
            } else {
                evenSum += i;
            }
        }
        System.out.println("奇数的和:"+oddSum);
        System.out.println("奇数的和:"+evenSum);
    }
}
练习2
package com.Shelton.struct;

public class ForDemo04 {
    public static void main(String[] args) {
        //用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个
        int i = 0;

        for(i=0;i<=1000;i++){
            if(i%5==0){
                System.out.println(i);
            }
        }
    }
}
/*
0
5
10
15
...
990
995
1000
*/
改进
package com.Shelton.struct;

public class ForDemo08 {
    //用for循环输出1-1000之间能被5整除的数,并且每行输出3个数
    public static void main(String[] args) {
        for (int i = 1; i <= 1000; i++) {
            if (i%5==0){
                System.out.print(i+"\t");//"\t"相比” “可以把空格对齐
            } // print不换行输出
            if (i%15==0){//0能被15整除会直接换行相当于print("\n");
                System.out.println();
            }
        }
    }
}
/*
5	10	15
20	25	30
35	40	45
50	55	60
... ... ...
980	985	990
995 1000
*/
练习3
package Com.Shelton.struct;

public class ForDemo09 {
    //打印99乘法表
    public static void main(String[] args) {
        int count = 0;

        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= 9; j++) {
                count = i*j;
                System.out.print(i+"*"+j+"="+count+"\t");
                if (j%9==0){
                    System.out.println();
                }
            }
        }
    }
}
/*
1*1=1  1*2=2  1*3=3  1*4=4  1*5=5  1*6=6  1*7=7  1*8=8  1*9=9  
2*1=2  2*2=4  2*3=6  2*4=8  2*5=10 2*6=12 2*7=14 2*8=16 2*9=18 
3*1=3  3*2=6  3*3=9  3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27 
4*1=4  4*2=8  4*3=12 4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36 
5*1=5  5*2=10 5*3=15 5*4=20 5*5=25 5*6=30 5*7=35 5*8=40 5*9=45 
6*1=6  6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 6*7=42 6*8=48 6*9=54 
7*1=7  7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 7*8=56 7*9=63 
8*1=8  8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 8*9=72 
9*1=9  9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81 
*/
改进
public class ForDemo10 {
    public static void main(String[] args) {

        int count = 0;

        for (int j = 1; j <= 9; j++) {
            for (int i = 1; i <= 9; i++) {
                count = i*j;
                if(i<=j){//舍去 1*1=1后面的1*2=2  1*3=3  1*4=4  1*5=5......
                        //1*2=2 2*2=4后面的2*3=6  2*4=8  2*5=10......
                    System.out.print(i + "*" + j + "=" + count + "\t");//i*j=count
                }
                if(i%9==0){//在输出9个数时换行
                    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
*/
改进
package Com.Shelton.struct;

public class ForDemo11 {
    public static void main(String[] args) {
        for (int j = 1; j <= 9; j++) {
            for (int i = 1; i <= j; i++) {//将if (i<j)放进for的判断条件里
                System.out.print(j+"*"+i+"="+(j*i)+"\t");
            }
            System.out.println();//内层不会输出大于j的数,因此不用判断是否输出了9个数直接换行
        }
    }
}
  1. 先打印一列
  2. 把固定的1再用一个循环包裹起来
  3. 去掉重复项 i<j
  4. 调整样式

4. 增强for循环

格式
for(声明语句 :表达式)
{
    \\代码语句
}
  • Java5引入的一种主要用于数组或集合的增强型for循环
例子
package Com.Shelton.struct;

public class ForDemo12 {
    public static void main(String[] args) {
        int[] numbers = {10,20,30,40,50}; //定义了一个数组

        for (int i = 0; i < 5; i++) {
            System.out.println(numbers[i]);//输出数组
        }
        System.out.println("=============================");

        for (int x:numbers){       //遍历数组的元素
            System.out.println(x);
        }
    }
}

/*
        10
        20
        30
        40
        50
        =============================
        10
        20
        30
        40
        50
 */

5. break

  • break用于跳出循环(中止整个循环)、不终止程序
package Com.Shelton.struct;

public class BreakDemo {
    public static void main(String[] args){
        int i = 0;
        while (i<100){
            i++;
            System.out.println(i);
            if (i==5){
                break;
            }
        }
    }
}
/*
        1
        2
        3
        4
        5
*/
package Com.Shelton.struct;

public class ContinueDemo {
    public static void main(String[] args) {
        int i = 0;
        while (i<100){
            i++;
            if (i%10==0){
                System.out.println();
                continue;//遇到能整除10的数直接结束循环,不执行
            }
            System.out.print(i);
        }
    }
}
/*      123456789
        111213141516171819
        212223242526272829
        313233343536373839
        414243444546474849
        515253545556575859
        616263646566676869
        717273747576777879
        818283848586878889
        919293949596979899
*/
package Com.Shelton.struct;

public class ContinueDemo {
    public static void main(String[] args) {
        int i = 0;
        while (i<100){
            i++;
            if (i%10==0){
                System.out.println();
                break;
            }
            System.out.print(i);
        }
    }
}
/*      
    123456789
*/

6. coutinue

  • continue用于终止本次循环,接着进行下一次循环判定
package Com.Shelton.struct;

public class ContinueDemo {
    public static void main(String[] args) {
        int i = 0;
        while (i<100){
            i++;
            if (i%10==0){
                System.out.println();
                continue;
            }
            System.out.print(i);
        }
    }
}
/*
123456789
111213141516171819
212223242526272829
313233343536373839
414243444546474849
515253545556575859
616263646566676869
717273747576777879
818283848586878889
919293949596979899
*/
goto关键词
package Com.Shelton.struct;

public class LabelDemo {
    public static void main(String[] args) {
        //打印101-150之间的所有质数

        outer:for (int i = 101; i <= 150; i++) { //跳转到指定地点
            for (int j = 2; j<=i/2; j++){
                if (i%j==0){
                    continue outer;//跳出循环,把所有能整除的数排除
                }
            }
            System.out.println(i+"");
        }
    }
}
/*
        101
        103
        107
        109
        113
        127
        131
        137
        139
        149
*/
关于质数的算法
  • 因为一自然数的约数是对称分布的,最小值1,最大值自己,中间的所有约数都是两两成对出现的
  • 所以判断整除的时候不需要从1遍历到自己,只要遍历到自己的一半就可以了,
  • 因为如果一个数x存在约数n,且n<=x/2,那么一定存在另一个约数m,且m>=x/2,使得m*n=x.

四、流程控制练习题

练习1

package Com.Shelton.struct;

public class TestDemo01 {
    /*
        打印三角形 5行
             *
            ***
           *****
          *******
         *********
    */
    public static void main(String[] args) {
        for (int j = 0; j < 5; j++){
            for (int i = 4; i >= 0; i--) {
                if (i>=j){
                    System.out.print(" ");
                }
            }
/*
            -----
            ----
            ---
            --
            -
*/
            for (int i = 0; i <= 4; i++) {
                if (i<=j){
                    System.out.print("*");
                }
            }
/*
         	    *
         	   **
         	  ***
         	 ****
         	*****
*/
           for (int i = 0; i <= 4; i++) {
                if (i<j){
                    System.out.print("*");
                }
            }
/*

            	 *
            	 **
            	 ***
            	 ****
*/

            System.out.println();
        }
    }
}
/*
      *
     ***
    *****
   *******
  *********
*/

改进

package Com.Shelton.struct;

public class TestDemo02 {

        public static void main(String[] args) {
            for (int i = 0; i < 5; i++) {
                for (int j = 5; j > i; j--) {
                    System.out.print(" ");
                }
/*
                for (int j = 5; j > 0; j--) {       //for里的嵌套if可以改成for的循环判断条件
                    if (j>i){
                        System.out.print(" ");
                    }
                }
*/
                for (int j = 0; j <= i; j++) {
                    System.out.print("*");
                }
                for (int j = 0; j < i; j++) {
                    System.out.print("*");
                }
                System.out.println();
            }
        }
}

Debug调试

技术分享图片

  • 可以看见程序运行到断点的情况

JAVA流程控制——循环结构

原文:https://www.cnblogs.com/Sheltonz/p/13660019.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!