这一章都是基本的if-else, while, switch-case 操作,新东西好像就是标签机制了。有个可能需要记住的陈述句唯一一个用到逗号操作符的地方是for的控制表达式
。有个作业题“吸血鬼数字”可以用来练练手。
标签机制
goto因为会把代码带到某些不期望的地方,所以被广大编程专家们诟病,Java也只是预留了这个保留字,但是没有提供这个功能。标签机制是Java语言的一种类似goto的机制,但并不完全一样,它由一个标签加冒号组成,break和continue后加标签。平时真的没用过,不过考试时却遇到过,多少了解一下吧。
lable1:
outer-Iteration {
inner-Iteration {
// ...
break; // 中断内部迭代,回到外部迭代
// ...
continue; // 继续内部迭代
// ...
continue lable1; // 中断内外迭代,转到lable1处,继续迭代
// ...
break lable1; // 中断内外迭代,转到lable1处,不再迭代
}
}
在抵达for循环的末尾前,递增表达式不会执行。
对上面的四种情况进行一下测试:
public class LableTest {
private static final int BREAK = 0;
private static final int CONTINUE = 1;
private static final int BREAK_LABEL = 2;
private static final int CONTINUE_LABEL = 3;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int type = scanner.nextInt();
label1:
for (int i = 0; i < 2; i++) {
System.out.println("outer-iteration i=" + i);
for (int j = 0; j < 2; j++) {
System.out.println("inner-iteration i=" + i + " j=" + j);
if (j == 1) {
switch (type) {
case BREAK:
System.out.println("break");
break;
case CONTINUE:
System.out.println("continue");
continue;
case BREAK_LABEL:
System.out.println("break lable1");
break label1;
case CONTINUE_LABEL:
System.out.println("continue lable1");
continue label1;
default:
break;
}
}
}
}
}
}
分别输入0-3,输出为:
Input is break
outer-iteration i=0
inner-iteration i=0 j=0
inner-iteration i=0 j=1
break
outer-iteration i=1
inner-iteration i=1 j=0
inner-iteration i=1 j=1
break
Input is continue
outer-iteration i=0
inner-iteration i=0 j=0
inner-iteration i=0 j=1
continue
outer-iteration i=1
inner-iteration i=1 j=0
inner-iteration i=1 j=1
continue
Input is break lable1
outer-iteration i=0
inner-iteration i=0 j=0
inner-iteration i=0 j=1
break lable1
Input is continue lable1
outer-iteration i=0
inner-iteration i=0 j=0
inner-iteration i=0 j=1
continue lable1
outer-iteration i=1
inner-iteration i=1 j=0
inner-iteration i=1 j=1
continue lable1