循环世界中的break和continue

1.break

break语句除了可以用于while,do-while,for这3大循环结构之外还能用于switch语句中.在循环结构中使用break的作用是当程序执行到break语句那么就退出它所在的循环结构(就近原则,如果是多层嵌套循环就只跳出当前的那一层循环),如果break语句是在switch语句中,不论这个switch语句是在别的switch语句中还是在循环语句中,同样的只是跳出这一个switch语句而不会影响外层的switch语句和循环语句的执行.

for(表达式1;表达式2;表达式3){//外层循环
    for(表达式1;表达式2;表达式3){//内层循环
        ...;
        break;
    }
}

当执行break时,只会跳出内层循环,外层循环会继续执行.

2.continue

和break不同的是continue只能用于循环结构中而不能用于switch结构中,这和他们的作用有关.在循环结构中continue的作用并非跳出循环而是跳过本次循环进行下一次循环(相当于程序进程跳转到其所在循环结构中代码块的的最末尾),在while和do-while语句中当遇到continue是进行下一次循环的条件判断,在for循环中是先进行循环变量的更新再进行条件判断(for(表达式1;表达式2;表达式3),遇到continue后先执行表达式3,再执行表达式2,如果表达式2判断为真则继续循环).
通过continue的作用我们也能看出这个语句就是为循环而生的,continue的执行并非宣告循环的结束而仅仅是结构体内部的一次跳转,而break的作用是拍屁股走人了.

//求1到100中所有的质数
for(int i=1;i){
    if(i==1)continue;//1不是质数,这是数学规定
    for(int j=2;j<i;j++){
        if(i%j==0)continue;
    }
    System.out.printf("%d,",i);
}

双循环打印

双循环在编程中常常被用来进行图形打印,因为计算机打印的顺序是先由上到下,再由左至右,所以我们通常是用外层循环控制行数的变化,内层循环则是在外层循环所在的行上进行列的控制,内层循环中内容(i,j)其实就是内外层循环卡出来的的点,通过一个或多个if语句进行行和列的数学关系判断规定打印我么就能得到想要的函数图形(不过这个图形可能是按水平轴对称的,因为我们设定的循环变量的更新通常都是以自加1进行的,这导致我们的y轴是向下而非向上的,这可以通过改变循环变量的初值和更新来调整).需要注意的是用这种方式需要对双层循环所扫描的每一个点进行打印(空白位置需要打印空格占位,如果该行后方没有打印内容则可以不用打印空格占位)而且每次打印长度必须等于预先计划好的长度.换行操作通常在外层循环中的末尾执行(每次内层循环的结束说明该行已经打印完成).

//打印乘法表
for(int i=1;i<=9;i++){//外层循环控制行数
            for(int j=1;j<=9;j++){//内层循环控制列数
                if(i>=j){
                    System.out.printf("%dX%d=%d ",i,j,i*j);
                }
            }
            System.out.println("");
        }
//打印数字金字塔
/*              1
 *             121
 *            12421
 */
int n=14;/金字塔的高度n层
for(int i=1;i<n;i++){
    for(int j=1;j<2*n;j++){
        //n+1-j距离中线的距离
        if(((i-1)-Math.abs(n+1-j))>=0){
        System.out.print((int)(Math.pow(2,(i-1)-Math.abs(n+1-j)))+"\t");//
        }else{
        System.out.print("\t");
        }
    }
    System.out.println("");
}