java中的goto语句
Java中的goto语句
在java中可以使用标签和continue,break组合形成goto的效果
public class LabelDemo {
public static void main(String[] args) throws InterruptedException {
//标签
exit:
while (true){
for(int i= 0 ; i < 10 ; i++){
if(i == 5)
// break ; //直接退出内层for循环继续下一次for循环
// continue ; //开始内层for循环的下一次
// break exit; //直接退出exit标签所执行标签的循环
// continue exit; //调到exit,从新执行while
System.out.print(i+" ");
Thread.sleep(10);
}
System.out.println();
}
}
}
#使用break的结果
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
... //代表死循环打印
#使用continue的结果
0 1 2 3 4 6 7 8 9
0 1 2 3 4 6 7 8 9
0 1 2 3 4 6 7 8 9
0 1 2 3 4 6 7 8 9
0 1 2 3 4 6 7 8 9
0 1 2 3 4 6 7 8 9
... //代表死循环打印
#使用break exit结果
0 1 2 3 4 //程序执行完毕,退出了2个循环
#使用continue exit结果
0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 ...... //代表死循环打印
总结
一般的continue会退回到内存循环的开头,并继续执行
一般的break会中断并跳出当前循环
代标签的continue会到达标签的位置,从新开始
带标签的break会中断并跳出当前标签所指的循环
程序联系
打印出4位数字的吸血鬼数字
public class VampireNumber {
public static void main(String[] args) {
printVampireNumber(4);
}
private static void printVampireNumber(int digit) {
int from = 1;
for(int i = 1 ; i < digit ;i++){
from *= 10;
}
int to = from*10 -1;
for(int i = from ; i<= to ;i++){
//排除后两位是两个0的情况,比如1000,1100,1200,1300...
if( i % 100 == 0 ){
continue;
}
isVampireNumber(i);
}
}
private static void isVampireNumber(int num) {
char[] arr = String.valueOf(num).toCharArray();
deal(arr[0]-'0',arr[1]-'0',arr[2]-'0',arr[3]-'0', num);
deal(arr[0]-'0',arr[2]-'0',arr[1]-'0',arr[3]-'0' ,num);
deal(arr[0]-'0',arr[3]-'0',arr[1]-'0',arr[2]-'0' ,num);
}
private static void deal(int a1, int a2, int b1, int b2 ,int num) {
if( ((a1*10+a2) *(b1*10+b2)) == num){
print(num ,a1*10+a2, b1*10+b2);
}
if( ((a1+a2*10) *(b1*10+b2)) == num){
print(num ,a1+a2*10, b1*10+b2);
}
if( ((a1*10+a2) *(b1+b2*10)) == num){
print(num ,a1*10+a2, b1+b2*10);
}
if( ((a1+a2*10) *(b1+b2*10)) == num){
print(num ,a1+a2*10, b1+b2*10);
}
}
private static void print(int num , int a,int b){
System.out.println( " "+ num+" ="+a+" * "+b);
}
}