Java中的流程控制

来源:互联网 发布:博时基金it 编辑:程序博客网 时间:2024/04/30 00:51
 Java中的流程控制
break,continue,for,while,switch及标签的使用。
@author: http://blog.csdn.net/zhangjunhd/ 07-1-27
 
1.break和continue
break用于强行推出循环,不执行循环中剩余的语句。continue用于停止执行当前的迭代,然后退回循环起始处,开始下一次迭代。看下面的代码:
public class BreakAndContinue {
       public static void main(String[] args) {
              for(int i=0;i<100;i++){
                     if(i==74) break;//Out of for loop
                     if(i%9!=0)continue;//Next iteration
                     System.out.println(i);
              }
        int i=0;
        //An "infinite loop":
        while(true){
               i++;
               int j=i*27;//40*27=1080,50*27=1350
               if(j==1269)break;//out of loop
               if(i%10!=0)continue;//Top of loop
               System.out.println(i);
        }
       }
}
结果:
0
9
18
27
36
45
54
63
72
10
20
30
40
 
2.标签在for循环中的使用
看下面的代码:
public class LabeledFor {
       public static void main(String[] args) {
              int i=0;
              outer:
              for(;true;){//infinite loop
                     inner:
                     for(;i<10;i++){
                            System.out.println("i="+i);
                            if(i==2){
                                   System.out.println("continue");
                                   continue;
                            }
                            if(i==3){
                                   System.out.println("break");
                                   i++;//Otherwise i never gets incremented.
                                   break;
                            }
                            if(i==7){
                                   System.out.println("continue outer");
                                   i++;//Otherwise i never gets incremented.
                                   continue outer;
                            }
                            if(i==8){
                                   System.out.println("break outer");
                                   break outer;
                            }
                            for(int k=0;k<5;k++){
                                   if(k==3){
                                          System.out.println("continue inner");
                                          continue inner;
                                   }
                            }
                     }
              }
       }
}
结果:
i=0
continue inner
i=1
continue inner
i=2
continue
i=3
break
i=4
continue inner
i=5
continue inner
i=6
continue inner
i=7
continue outer
i=8
break outer
注意,break会中断for循环,而且在抵达for循环的末尾之前,递增表达式不会执行。由于break跳过了递增表达式,所以在i==3的情况下直接对i执行递增运算。在i==7的情况下,continue outer语句会跳到循环顶部,而且也会跳过递增,所以这里也对i直接递增。
如果没有break outer语句,就没有办法从内部循环里挑出外部循环。这是由于break本身只能中断最内层的循环(continue也是如此)。
当然,如果想在中断循环的同时退出方法,简单地用一个return即可。
 
3.标签在while循环中的使用
看下面的代码:
public class LabeledWhile {
       public static void main(String[] args) {
              int i=0;
              outer:
              while(true){
                     System.out.println("Outer while loop");
                     while(true){
                            i++;
                            System.out.println("i="+i);
                            if(i==1){
                                   System.out.println("continue");
                                   continue;
                            }
                            if(i==3){
                                   System.out.println("continue outer");
                                   continue outer;
                            }
                            if(i==5){
                                   System.out.println("break");
                                   break;
                            }
                            if(i==7){
                                   System.out.println("break outer");
                                   break outer;
                            }
                     }
              }
       }
}
结果:
Outer while loop
i=1
continue
i=2
i=3
continue outer
Outer while loop
i=4
i=5
break
Outer while loop
i=6
i=7
break outer
注:Java中需要使用标签的唯一理由就是因为有循环嵌套,而且你想从多层嵌套中break或continue。
 
4.switch
switch语句要求使用一个选择因子,并且必须是int或char那样的整数值。例如,假如一个字符串或浮点数作为选择因子,那么它们在switch语句里不会工作。看下面的代码:
public class VowelsAndConsonants {
       public static void main(String[] args) {
              for(int i=0;i<100;i++){
                     char c=(char)(Math.random()*26+'a');
                     System.out.println(c+":");
                     switch(c){
                         case'a':
                         case'e':
                         case'i':
                         case'o':
                         case'u':System.out.println("vowel");
                                 break;
                         case'y':
                         case'w':System.out.println("Sometimes a vowel");
                                 break;
                         default:System.out.println("consonant");
                     }
              }
       }
}
①Math.random()范围为[0,1)
②char c=(char)(Math.random()*26+'a');
Math.random()会产生一个double值,所以26会转换成double类型,以便执行乘法运算。这个运算也会产生一个double值。这意味着为了执行加法,必须将’a’转换成double。最后使用显示的类型转换将double结果转回char。
③将一个float或double值转型成整数后,总是将小数部分“砍掉”。
 参考Thinging in Java 3rd