2009年2月10日 星期二

Java小練習(15)--break與continue練習

break與continue搭配label來控制迴圈是很有趣的方法,我經常用他來判斷自己的想法正不正確。 我作一個巢狀迴圈,外迴圈跑6次,內迴圈跑4次,加入continue跟break來看看會發生甚麼有趣的事情。 --------- example 1 -----------
public class LoopTest {

  public static void main(String[] args) {
      byte i, j;

      L1:
      for (i = 1; i <= 6; i++) {             System.out.print("i=" + i);             System.out.print("\t");             continue L1;
          L2:
          for (j = 1; j <= 4; j++) {                 System.out.print("j=" + j);                 System.out.print("\t");              }             System.out.println();         }     } }
--------- example 1 ends ----------- continue放在第一層for迴圈的結果,會導致L2完全沒機會被執行到,執行結果是:
i=1        i=2        i=3        i=4        i=5        i=6
--------- example 2 ---------
public class LoopTest {

  public static void main(String[] args) {
      byte i, j;

      L1:
      for (i = 1; i <= 6; i++) {             System.out.print("i=" + i);             System.out.print("\t");             break L1;
          L2:
          for (j = 1; j <= 4; j++) {                 System.out.print("j=" + j);                 System.out.print("\t");              }             System.out.println();         }     } }
--------- example 2 ends --------- break放在第一層for迴圈的結果,會導致L2完全沒機會被執行到,執行結果是:
i=1
然而我們無法在這個地方放置break L2或continue L2,她會顯示找不到L2個標籤。 --------- example 3 ---------
public class LoopTest {

  public static void main(String[] args) {
      byte i, j;

      L1:
      for (i = 1; i <= 6; i++) {             System.out.print("i=" + i);             System.out.print("\t");              L2:             for (j = 1; j <= 4; j++) {                 System.out.print("j=" + j);                 System.out.print("\t");                 continue L2;
          }
          System.out.println();
      }
  }
}
--------- example 3 ends ---------
i=1        j=1        j=2        j=3        j=4     
i=2        j=1        j=2        j=3        j=4     
i=3        j=1        j=2        j=3        j=4     
i=4        j=1        j=2        j=3        j=4     
i=5        j=1        j=2        j=3        j=4     
i=6        j=1        j=2        j=3        j=4  
跑出來的結果可想而知,會跟沒有continue是一樣的,因為她本來就會重複作。 那麼如果是continue L1會如何呢? --------- example 4 ----------
public class LoopTest {

  public static void main(String[] args) {
      byte i, j;

      L1:
      for (i = 1; i <= 6; i++) {             System.out.print("i=" + i);             System.out.print("\t");              L2:             for (j = 1; j <= 4; j++) {                 System.out.print("j=" + j);                 System.out.println("\t"); //換行以方便顯示
              continue L1;
          }
          System.out.println();
      }
  }
}
--------- example 4 ends ---------
i=1        j=1     
i=2        j=1     
i=3        j=1     
i=4        j=1     
i=5        j=1     
i=6        j=1
內迴圈作一次之後沒機會作第二次就跑到外迴圈了,所以苦命的內迴圈用永都只能作第一次。 --------- example 5 ---------
public class LoopTest {

  public static void main(String[] args) {
      byte i, j;

      L1:
      for (i = 1; i <= 6; i++) {             System.out.print("i=" + i);             System.out.print("\t");              L2:             for (j = 1; j <= 4; j++) {                 System.out.print("j=" + j);                 System.out.print("\t");                 break L2;
          }
          System.out.println();
      }
  }
}
--------- example 5 ends --------- break會脫離所標示的迴圈:即內迴圈,因此內迴圈永遠只能作一次。example 4跟5是一樣的結局。
i=1        j=1     
i=2        j=1     
i=3        j=1     
i=4        j=1     
i=5        j=1     
i=6        j=1
--------- example 6 ---------
public class LoopTest {

  public static void main(String[] args) {
      byte i, j;

      L1:
      for (i = 1; i <= 6; i++) {             System.out.print("i=" + i);             System.out.print("\t");              L2:             for (j = 1; j <= 4; j++) {                 System.out.print("j=" + j);                 System.out.print("\t");                 break L1;
          }
          System.out.println();
      }
  }
}
--------- example 6 ends --------- break會跳離標籤所示的迴圈:即外迴圈,因此只做一次就結束了。
i=1        j=1
很好玩吧!

沒有留言: