一、嵌套循环
循环可以互相嵌套,以实现更加复杂的逻辑,其代码的复杂程度也会提高,对初学者而言这应该是个难点,下面我们通过一些例子说明嵌套循环的使用,读者要自己把这些代码上机练习,并理解程序运行的流程。
先看看一个简单例子,代码如下:
//二重循环 for(int i=0;i<3;i++){ for(int j=0;j<2;j++){ System.out.println("i="+i+",j="+j); } }
上面是一个二重循环,因为在for循环里又嵌套了一个循环,当然循环可以无限嵌套,所以也就是有无限重的循环,但是一般我们写代码的时候很少超过三重循环。
在第一层循环中,循环的控制头和上面介绍的没有不同,仅仅只是该循环的循环体里又包含了一个循环,我们需要的是理解这段程序的执行流程:
外层循环i=0时,条件满足进入循环体,并执行第二层循环,
第二层循环是j=0,条件满足进入循环体,并执行里面的输出语句,输出:
i=0,j=0
然后还是第二层的循环还没有结束,继续执行,这个时候j=1,所以输出:
i=0,j=1;
第二层循环结束。
这个时候外层循环还没有结束,i自增1后,又进入循环,并再次执行第二层循环这个时候i=1,又再一次的执行了第二层的循环:
第二层循环是j=0,条件满足进入循环体,并执行里面的输出语句,输出:
i=1,j=0
然后还是第二层的循环还没有结束,继续执行,这个时候j=1,所以输出:
i=1,j=1;
第二层循环结束。
类似的,这个时候外层循环还没有结束,i自增1后,i=2又进入二层循环,所以这个程序最后的输出结果是:
i=0,j=0
i=0,j=1
i=1,j=0
i=1,j=1
i=2,j=0
i=2,j=1
下面我们再具一个稍微复杂一点的程序:输出乘法表。
1×1=2
1×2=2 2×2=4
1×3=3 2×3=6 3×3=9
...
1X9 ... ... 9X9=81
实现代码如下:
for(int i=1;i<10;i++){ for(int j=1;j<=i;j++){ System.out.print(j+"X"+i+"="+(i*j)+" "); } System.out.println(); }
二、break
break与continue语句和都是可以控制循环的执行流程的,其中break语句可以直接强行跳出整个循环,默认情况下直接跳到下一条语句进行执行。比如我们要输出类似下面的三角形星号符。
*
* *
* * *
* * * *
* * * * *
* * * * * *
* * * * * * *
实现代码如下:
public class Test { //三角形的高度 // 直角三角形的高度 int hight = 0; System.out.println("请输入三角形的高度:"); // 提示信息 Scanner scnr = new Scanner(System.in); // 获取控制台输入 hight = scnr.nextInt(); // 在控制台输入中取下一个int值 for (int i = 0; i < hight; i++) { // 按hight的高度一层一层打印 for (int j = 0; j < hight; j++) { // 每次继续迭代,原则第一层打一个, 第二层打二个,第三层打三个… if (j <= i) { System.out.print("*"* "); } else { // 退出循环的条件,比如在第二层打 第三个是退出 break; //后面不能写代码了,会提示错误 } } System.out.println(); // 每层的换行符 }
读者可以上机演示上面的代码。注意在嵌套循环中break只能跳出自己的循环体,对于父循环体没有任何影响。直接写在break语句后面的代码在Eclipse中会提示错误,因为这些语句具有不可达性。
前面介绍过在java中没有goto语句,但是在循环中使用break语句可以达到类似goto语句的效果,这种用法是在break语句中添加行标号,控制会被传递给当前方法中的带有这一标号的语句,这种格式的写法如下:
break label;
三、continue语句
continue语句语句和break语句一样都是指退出循环,但是区别在于continue特指退出当前一层循环,继续下一层循环的执行。可以认为是continue是对break语句的一种补充机制,提供了终止当前一层循环继续去判断循环控制表达式进而继续执行循环体的可能。Continue跟break类似,同样提供类似goto的功能:
continue toCode;
注意退出循环的方法除了使用break语句/continue语句外,你还可以使用return,return的优先级别非常高,在任何情况下它都会直接终止当前方法的运行。参考下面的示例:
for (int i = 0; i < 3; i++) { System.out.println("开始第" + i + "次for循环"); if (i == 1) { continue;//程序运行后面的代码就不会执行,但循环不会退出。 } System.out.println("看看continue后这里执行了吗?"); }