跳转语句
直接上代码:
/**
* 跳转指令
*/
public static void GoTo(){
for (int j = 0; j < 10 ; j++) { //1
for (int i = 0; i<10;i++){ //2
if (i>5) {
System.out.println(j+" "+ i);
continue;
}
System.out.println("contine没有跳出"); //3
}
}
}
- continue:表示跳出本次循环,即所在层循环中,continue之后的代码(3)不再执行。继续执行2 层的下一次循环。
- 但是,该语句可以通过 “参数”指定跳转位置,改变跳转的方向。如下:
/**
* 跳转指令
*/
public static void GoTo(){
outer:for (int j = 0; j < 10 ; j++) { //1
for (int i = 0; i<10;i++){ //2
if (i>5) {
System.out.println(j+" "+ i);
continue outer;
}
}
}
}
public static void GoTo(){
for (int j = 0; j < 10 ; j++) { //1
for (int i = 0; i<10;i++){ //2
if (i>5) {
System.out.println(j+" "+ i);
break;
}
}
}
}
- 以上代码通过 指定了continue的跳转位置,所以在此处相当于break
- break 是跳出所在层循环,即第2层 ,继续执行第 1层的下一次循环。
- 通过该方法可以跳出多重循环:
/**
* 跳转指令
*/
public static void GoTo(){
outer:for (int j = 0; j < 10 ; j++) {
for (int i = 0; i < 10; i++) {
for (int px = 1; px < 10; px++) {
if (i > 5) {
System.out.println(j + " " + i);
continue outer;
}
}
}
}
}
直接跳到最外层循环。
continue 与break的巧妙应用
/**
* 计算1000 以内10个最大质数和
*/
public static void Sum(){
int sum =0,i = 0;
outer:for(int j = 1000;j>2;j--){
for(int x = 2;x<j/2;x++){
if(j%x == 0){
continue outer;
}
}
i++;
sum += j;
if(i<10){
//1 - 9 9个数
System.out.print(j + "+");
}else{
//第 10 个数
System.out.println(j +"="+sum);
break;
}
}
}
分析:1. 当 j 不是质数时,会执行到continue -> outer:,跳出判断质数的循环,回到最外层继续继续寻找下一个质数。
2. 如果换成break之后,发生错误。前后对比:
切换成break后,break(第一个)跳出内层for循环,继续执行 i++... ,相当于内层for循环没起作用。
第二个break是,在找到 10 个质数后,跳出最外层循环,不再寻找下一个质数。