今天看到一个面试问题:Java 有没有 goto? 对于这块不是很熟悉就百度查了下结果:goto语句是改变程序的流向,转去执行语句标号标识的语句,会造成程序混乱,使理解和调试上产生困难,C语言中存在,而Java中嘿,还真有,但是不能用,它只是java中的保留字。
这我就不服了啊,java中没有goto,是为了不让结构混乱的话,那我还记得有一个标签也可以跳来跳去的,记得不太清,又去查了下标签,这玩意只能在循环外面用,java标签是为了在多重循环中方便使用break和continue设计的,只可以定义在三种循环之前,相当于给循环取名字,指明break和continue哪一个循环。然后我写了个这样的demo:
int a = 0;
int b = 0;
int c = 0;
a:
for(; a<10; a++){
b:
for(;b<10; b++){
c:
for(;c<10;c++){
if(c==3){
System.out.println(a+"-"+b+"-"+c);
continue a;
}
if(c == 5){
System.out.println(a+"-"+b+"-"+c);
break b;
}
}
}
}
写完了我debug了下...感觉逻辑有点不太顺畅啊,就继续查了下continue和break的区别,想弄明白为什么这玩意是这么玩的。
continue和break(循环中):主要在于之后的循环中是否进入;
break:退出所在的循环体,再不执行;
continue:不执行此次循环体并退出所在循环体,下次条件满足再执行;
就比如:
int count = 0;
for(int i=0; i<5; i++){
for(int j=0; j<5; j++){
if(j == 3){break;}
count++;
}
}
System.out.println(count);
当 j == 3后面是break时,结果输出15,而当时continue时,结果输出是20,当都没有时,结果是25;
那么跳出一个多重循环的方式有哪些了呢?1)就是开始写的标签加break;2)还有一种巧妙一点的方式,添加一个额外的判断作为循环条件,就好像:
boolean go = true;
for(int i=0; i<10&&go; i++){
for(int j=0; j<10; j++){
if(j == 2){
go = false;
break;
}
}
}