循环结构(while/do-while/for)

逻辑:如果…,则再继续…。

循环结构分为当型(while、for)和直到型(do…while)

当型:布尔表达式条件为true时,反复执行某语句,当布尔表达式的值为false时才停止循环。

直到型:先执行某语句, 再判断布尔表达式,为true时,就执行反复某语句,当布尔表达式条件为false时才停止循环。

while循环

格式:

While (布尔表达式) {
    循环体;
}

当布尔表达式的结果为true时一直执行循环体内容,直到结果为false时结束循环。

注意:循环体中必须要有使循环结束的语句,复制会出现死循环。

示例:

package com.itcode.demo1;  

/**      
 * @author: 成都码到功成学员  
 * @Description:  
 * 需求:while循环加if-else嵌套使用 求1-100奇数之和,偶数之和。 
 *      以后我们做练习最好能把以前的知识结合在一起,锻炼自己的思维能力。 
 */  
public class TestControl5 {  

    public static void main(String[] args) {  

        int i = 0;  
        int count1 = 0; // 奇数和  
        int count2 = 0; // 偶数和  

        while (i <= 100) {  
            // 当i是奇数时就把奇数的值累加到count1。反之则累加到count2。  
            if (i%2 != 0) {  
                count1 += i;  
                i ++;  
            } else {  
                count2 += i;  
                i ++;  
            }  
        }  

        System.out.println("奇数和:" + count1);  
        System.out.println("偶数和:" + count2);  
    }  
}

效果:

示例二:输入10个人的年龄,判断大于30岁所占的比例

do-while循环

格式:

do{
    循环体;
}While (布尔表达式);

概述:先执行某语句, 再判断布尔表达式,为true时,就执行反复某语句,当布尔表达式条件为false时才停止循环。

和while的区别:while是先判断再执行,do…while是先执行再判断。

示例:

package com.itcode.demo1;  

/**      
 * @author: 成都码到功成学员  
 * @Description:  
 * 需求:do…while循环版求1-100直接奇数和和偶数和,知道大概格式就行,很少用。 
 */  
public class TestControl6 {  

    public static void main(String[] args) {  

        int i = 0;  
        int count1 = 0; // 奇数和  
        int count2 = 0; // 偶数和  

        do {  
            // 当i是奇数时就把奇数的值累加到count1。反之则累加到count2。  
            if (i%2 == 0) {  
                count2 += i;  
                i++;  
            } else {  
                count1 += i;  
                i++;  
            }  
        } while (i <= 100);  

        System.out.println("奇数和:" + count1);  
        System.out.println("偶数和:" + count2);  
    }  
}

for循环

格式:

for(初始化语句;布尔表达式;迭代因子){
    循环体;
}

细节阐述

  • 初始化语句:设置循环变量初始化值。

  • 布尔表达式:任意布尔表达式都可以。

  • 迭代因子:控制循环变量的增减。

  • 循环体:输出内容

  • 初始化作用域:仅限于for循环内。

无限循环

for (;;) {//类似while(true){}  

}

示例:

package com.itcode.demo1;  

import java.util.Scanner;  

/**      
 * @author: 成都码到功成学员  
 * @Description:  
 * 键盘录入for循环n*n乘法表 
 */  
public class TestControl7 {  

    public static void main(String[] args) {  

        Scanner scanner = new Scanner(System.in);  
        System.out.println("请输入一个数:");  
        int a = scanner.nextInt();  
        for (int x = 1; x <= a; x++) { // 外循环控制行数  
            for (int y = 1; y <= x; y++) {// 内循环控制列数  
                // System.out.print()与System.out.println();的区别是,System.out.print();不换行。  
                System.out.print(y + "*" + x + "=" + x * y +"\t");  
            }  
            System.out.println();  
        }  
    }  
}

注意for增强型

for-each/增强for循环不能修改数组元素的值,不涉及索引(下标)的操作。

String[] arr = {"成都", "码到", "功成"};  

        // 普通for循环  
        for (int i = 0; i < arr.length; i++) {  
            System.out.println(arr[i]);  
        }  

        // 增强/for-each循环 只能读取值,不能修改值。  
        for (String s : arr) {  
            System.out.println(s);  
        }  

嵌套循环

概述:在一个循环语句内部再嵌套1-n个循环。while、do-while与for循环相互间可任意嵌套多层。

示例:

package com.itcode.demo1;  

/**      
 * @author: 成都码到功成学员  
 * @Description:  
 * 需求:循环嵌套练习2个 
 */  
public class TestControl2 {  

    public static void main(String[] args) {  

        // 1.  
        System.out.println("第一个练习效果:");  

        for (int i = 1; i <= 5; i++) {  
            for (int j = 1; j <= 5; j++) {  
                System.out.print(j + "\t");  
            }  
            System.out.println();  
        }  

        // 2.用while循环或其他循环输出1-1000之间能被5整除的数,且每行输出4个。  
        System.out.println("第二个练习效果:");  

        for (int i = 1; i < 1000; i++) { // 输出1-1000之间  
            if (i%5 == 0) { // 能被5整除的数  
                System.out.print(i + "\t");  
            }  
            if(i%20 == 0){// 每行输出4个, 就是每行输出个数乘以(能被*整除的数)  
                System.out.println();  
            }  
        }  

    }  
}

效果:

continue,break

  • continue:略过本次循环之后继续循环。(只能放在循环中,搭配if语句使用)

  • break:直接终止,剩下的循环不再执行。跳出所在循环或switch语句。(一般用于循环或者switch语句中),想跳出外层循环请使用标签。

  • return:返回值和结束方法运行。

注意:1.break可以放在任何语句中,比如单独使用if语句必须搭配标签使用。

o:if(a=2){
    break o;
}

示例:

package com.itcode.demo1;  

/**      
 * @author: 成都码到功成学员  
 * @Description:  
 * 需求:contine,break的区别 
 */  
public class TestControl9 {  

    public static void main(String[] args) {  

        // 让我们来看相同条件下continue语句和beak语句运行结果的不同  
        System.out.println("continue语句运行结果:");  
        for (int i = 1; i < 12; i++) {  
            if (i == 7) {  
                continue;// 7不会显示,其它小于12的数字都会显示  
            }  
            System.out.print(i + "\t");  
        }  

        System.out.println();  
        System.out.println("beak语句运行结果:");  
        for (int i = 1; i < 12; i++) {  
            if (i == 7) {  
                break;// 大于6的数字都不会显示  
            }  
            System.out.print(i + "\t");  
        }  
    }  
}

效果:

练习:

package com.itcode.demo1;  

/**      
 * @author: 成都码到功成学员  
 * @Description:  
 * 需求:contine,break 练习。 
 */  
public class TestControl10 {  

    public static void main(String[] args) {  
        // 把100~150之间不能被3整除的数输出,并且每行输出5个  
        int sum = 0; //计数器  
        for (int i = 100; i < 150; i++) {  
            if (i%3 == 0) {  
                continue;// 如果是三的倍数,跳过  
            }  
            // 反之则输出  
            System.out.print(i+ ",");  
            sum++;// 每输出一个就计一个  
            // 每行的数量达到五个,换行  
            if (sum%5 == 0) {  
                System.out.println();  
            }  
        }  
    }  
}

效果:

带标签的continue/break

简单来讲,标签可以从内循环调到外循环。一般不用,但需要了解。

示例:

package com.itcode.demo;  

import javax.swing.JFrame;  

/**      
 * @author: 成都码到功成学员  
 * @Description:  
 * 求质数。 
 * 质数:只能被1和自己本身整除的数,1和2不算。 
 * 数学逻辑:如果一个数N从N%2开始,依次N%3,N%4,N%5,N%6……一直n%(小于n/2)其结果都不是0的时候,这个数就是质数。 
 */  
public class TestControl11 {  

    public static void main(String[] args) {  
        /*  
         * 求[101-104)之间的质数  
         * 执行过程: 
         * 注意:到哪一层代码我都用汉字一二三四五表示,让大家更好理解。 
         * ① 验证101 
         * 1.从“一”开始,int i =101, i <104满足条件,继续往下。 
         * 2.来到“二”,j等于2,判断条件2小于101/2,继续往下。 
         * 3.来到“三”,101%2值不等于0,回到“二”,先给j加上1,j的值变成3。3小于101/2,往下执行。 
         * 4.又来到“三”,101%3值不等于0,又回到“二”,j++,j的值变成4。判断4小于101/2。往下执行。 
         * 5.来到“三”,101%4的值不等于0,又回到“三”…… 
         * 6.“三”“二”之间往返遍历判断,也就是“101%5,101%6,101%7,101%8,101%9……”的值是否等于0。 
         * 7.执行到101%49时还不满足不满足i%j==0,还是要继续返回到“二”,49加1等于50。 
         * 8.50不满足j < 101/2(101/2=50,因为j的值是整数型),结束“二”/内循环,来到“五”,打印出101。 
         * ② 验证102 
         * 1.打印完毕回到“一”,执行"i++",i的值由101变成102。判断102小于104,继续往下。 
         * 2.来到“三”,102%2值等于0。不是质数,进入“三”里面,通过"continue outer;"直接跳到"outer:for(i……"/外循环。 
         * ③ 验证103 
         * 1.执行"i++",i的值由102变成103。判断103小于104,继续往下。 
         * 2.来到“二”,j等于2,判断条件2小于103/2,继续往下。 
         * 3.来到“三”,103%2值不等于0,回到“二”,先给j加上1,j的值变成3。3小于103/2,往下执行。 
         * 4.又来到“三”,103%3值不等于0,又回到“二”,j++,j的值变成4。判断4小于103/2。往下执行。 
         * 5.来到“三”,103%4的值不等于0,又回到“三”…… 
         * 6.“三”与“二”之间往返遍历判断,也就是“103%5,103%6,103%7,103%8,103%9……”的值是否等于0。 
         * 7.执行到103%50还不满足不满足i%j==0,还是要继续返回到“二”,50加1等于51。 
         * 8.51不满足j < 103/2(103/2=51,因为j的值是整数型),结束“二”/内循环,来到“五”,打印出103。 
         * ④ 结束 
         * 1.打印完毕回到“一”,执行"i++",i的值由103变成104。判断104小于104不满足,整个循环执行完毕。 
         * 2.所以控制台打印结果就是101和103。 
         * */  

        // 一 外循环,依次遍历[101,104)的值。  
        outer:for(int i=101; i<104; i++) {  

            // 二 内循环 从2开始,依次加一,为“N%2开始,依次N%3,N%4,N%5,N%6……一直n%(小于n/2)”做准备。  
            for(int j=2; j <i/2; j++) {  

                // 三 if语句 验证值是否为质数   
                if(i%j == 0) {  

                    // 四 跳转到外循环。  
                    continue outer;  
                }  
            }  

            // 五 打印出质数。  
            System.out.println(i+"\t");   
        }  
    }  

}

效果:

练习

练习1:

效果:

Last updated

Was this helpful?