四、程序控制:goto,break与continue详解

break与continue

  1. break:用于强行退出循环,不执行循环中的剩余语句。
  2. continue:停止当前这次跌代,退回到循环开始处,继续下一次迭代。
pubilc class BreakAndContinue(){
	pbulic void main(String [] args){
		for(int i=0; ; i++){
			if(i == 9){
				break;
			} else {
				continue;
			}
			System.out.println("abc");
		}
	}
}

上述代码中,尽管 for 循环没有定义退出循环的条件语句,但是因为存在break,所以不会形成死循环,因为break可以跳出循环。

由于continue的存在,使得当i在 0 到 8 内,都不会执行后面的输出语句。

goto

C++ 语言中,可以使用 goto 来控制程序的执行顺序,例如:

int main(){
	label:
	printf("%s/n","abc");
	for(int i=0; i<10; i++){
		if(i % 2 == 0){
			goto label;
		}
	}
}

上述代码中循环每次执行到i为偶数时,跳转到label处,继续往下执行,因此这段代码虽然for循环带了结束条件,但是由于goto的原因,导致程序最终是死循环。

goto的利弊

goto起源于汇编语言的程序控制:若 A 成立,跳转到 labelA 处,否则跳转到 labelB 处。

由于 goto 的滥用,导致在源码级别上跳转操作过多,无法很好的辨识程序的逻辑。

在少数情况下,goto还是组织控制流程的最佳手段。因此 Java 中虽然没有将 goto 作为关键字而是保留关键字,但是依旧保留了 goto 这种跳转机制,即便没有 goto 这么灵活。

Java 中 break 与 continue 带标签用法

标签是后面跟有冒号的标识符,如下:

label1:

在 Java 中,标签起作用的地方刚好是在迭代语句之前,标签与迭代语句之间不能有任何语句,例如:

label1:
for(int i=0; i<10; i++){}

这是由于 break 与 continue 通常只中断当前循环,而与标签一起使用时,它们会中断循环,跳转到标签处。

下面来看一个例子:

outer: 
for (int i=0; ; i++) {
    inner: 
    for(int j=0; j<6; j++){
        System.out.println("i="+i+" j="+j);
        if (i == 1 && j == 1) {
            System.out.println("break");
            break;
        }
        if (i == 2 && j == 2) {
            System.out.println("continue");
            continue;
        }
        if (i == 3 && j == 3) {
            System.out.println("beak inner");
            break inner;
        }
        if (i == 4 && j == 4) {
            System.out.println("continue outer");
            continue outer;
        }
        if (i == 5 && j == 5) {
            System.out.println("break outer");
            break outer;
        }
    }
}
System.out.println("abc");

//输出结果:
i=0 j=0
i=0 j=1
i=0 j=2
i=0 j=3
i=0 j=4
i=0 j=5
i=1 j=0
i=1 j=1
break
i=2 j=0
i=2 j=1
i=2 j=2
continue
i=2 j=3
i=2 j=4
i=2 j=5
i=3 j=0
i=3 j=1
i=3 j=2
i=3 j=3
beak inner
i=4 j=0
i=4 j=1
i=4 j=2
i=4 j=3
i=4 j=4
continue outer
i=5 j=0
i=5 j=1
i=5 j=2
i=5 j=3
i=5 j=4
i=5 j=5
break outer
abc

上述代码中,只有当break outer时,才正真跳出了两重循环。

通过观察结果,可以发现:

  1. break inner只终止了inner后面的循环,
  2. continue out是跳到outer后面的第一层循环前,并且继续这一层循环的下一次循环。
  3. break outer是跳转到outer处,并结束outer后的循环。

Java 中使用标签的唯一场景:想从多层嵌套循环中 break 或者 continue

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值