循环是为了提高效率和代码的可读性。
但是一个工作很好的循环体在某些条件下要放弃本次循环。
循环之循环的跳转——continue语句
本文出现的概念有:
continue中的标号 | 标号由合法标识符和“:”组成。如:outer: |
---|---|
标识符 | java中包、类、方法、参数、变量的名字可以由任意顺序的英文字母、数字、下划线(_)或美元符($)组成,但是标识符不能以数字开头,且标识符不能是关键字。 |
continue 标号;
其中标号是可选参数
▲不带标号跳转:
如果执行不带标号的continue语句,则结束本次循环,跳过循环体中剩下的没有被执行的语句,根据循环的条件来判断是否执行下一次循环,或者结束循环。如果是for循环,还要先执行表达式3,改变循环控制变量的值。 例题:实现输出一百以内能被7整除的所有数,使用continue语句 来过滤其他数字
public class Test { public static void main(String[] args) { for(int i=0;i<100;i++) { if(i%7!=0) { continue; } System.out.println(i+"、"); } } }
▲带标号跳转:
如果执行带标号的continue语句,则不是跳过当前循环语句的一次循环,而是跳过标号指定的循环语句的一次循环。因为标号是用来指定循环语句的,所以标号定义在循环语句之前。带标号的循环语句经常用在多层循环之中。
例题:使用for循环和带标号的continue语句输出九九乘法表
public class Test { public static void main(String[] args) { outer: for (int i = 1; i < 10; i++) { for (int j = 1; j < 10; j++) { if (j > i) { System.out.println();// 换行 continue outer;// 跳过标号指定的循环,放弃不需要的乘数 } String str = j + "*" + i + "=" + j * i; System.out.print(str + "\t");// 使用制表符格式化输出 } } } }
拓展:
于无声处听惊雷
不带标号的continue语句中,有这样一句要求,如果是for循环,还要先执行表达式三,改变控制循环变量的值。这句话可能听起来比较没有什么概念,下面以一个例题来说明:
例题:用Iterater和for循环输出列表中索引为偶数的元素
于是我就想当然的写出了如下代码:
public class IteratorDemo { public static void main(String[] args) { // TODO 自动生成的方法存根 List<Integer> list = new ArrayList<Integer>();// 创建列表 for (int i = 0; i < 10; i++) {// 向列表中增加10个元素 list.add(i); } System.out.println("列表中的偶数序号元素:"); boolean flag=true; for (Iterator<Integer> it = list.iterator(); it.hasNext();) { flag=!flag; if(flag) { continue; } System.out.print(it.next() + " "); } } }
结果却是输出了列表中的所有元素,这说明continue语句没有起作用,因为在这种做法下,for循环的循环条件中没有表达式三,所以continue语句不执行了。
而题中要求的是使用for循环和Iterator来实现这个功能,因此没有办法借用Boolean型变量来完成奇偶数的分离,所以想要在这种情况下实现奇偶数分离的正确的代码是:
public class IteratorDemo { public static void main(String[] args) { // TODO 自动生成的方法存根 List<Integer> list = new ArrayList<Integer>();// 创建列表 for (int i = 0; i < 10; i++) {// 向列表中增加10个元素 list.add(i); } System.out.println("列表中的偶数序号元素:"); for (Iterator<Integer> it = list.iterator(); it.hasNext(); it.next()) { System.out.print(it.next() + " "); } } }