隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0
          數據加載中……

          跳出多層循環的簡單方法(Java版)

          本文為原創,如需轉載,請注明作者和出處,謝謝!

              在Java程序中可能使用多層循環來處理復雜的邏輯。但如果要從最內層循環跳出最外層循環是比較麻煩。下面的代碼是一個三層循環的例子:

          String[] arr= new String[]{"a""b""c"};       
          for(String s: arr)
          {
             
          for(String ss: arr)
              {
                 
          for(String sss: arr)
                  {
                      System.out.println(sss);
                  }
              }               
          }

              如果要從第三層循環跳出第一層循環,可以通過設置標志的方法來實現,但這比較麻煩。當然,如何使用過C或C++的開發人員可以想到使用goto語句,如下面的代碼所示:

          String[] arr= new String[]{"a""b""c"};   
            
          for(String s: arr)
          {
              
          for(String ss: arr)
              {
                  
          for(String sss: arr)
                  {
                      System.out.println(sss);
                      goto label;
                  }
              }               
          }
          label:

              雖然上面的代碼看似可行,不過Java雖然還有goto關鍵字,但這個關鍵字卻不能使用(Java編譯器會拋出異常)。不過Java還提供了另外一種類似goto的解決方案,這就是break n和continue n。其中n表示標簽名。只是在Java中只能在for、while、do...while三種循環語句前面定義,標簽與循環體之間不能有任何其他的語句,如下面的標簽定義是合法的:

          label:  // 定義標簽
          for(int i = 0; i < 10; i++)
          {
              ... ...
          }

              下面的標簽定義是不合法的:

          label:  // 定義標簽
          System.out.println("abcd");  // 此處不能有任何Java語句
          for(int i = 0; i < 10; i++)
          {
              ... ...
          }

              使用break n跳出多層循環的代碼如下:

          labelA:
          for(String s: arr)
          {            
              
          for(String ss: arr)
              {
                  
          for(String sss: arr)
                  {
                      System.out.print(sss);
                      
          break labelA;
                  }
              }               
          }

              上面的代碼只輸出了一個a,在第三層使用break labelA可以理解為如下的代碼形式(雖然這段代碼并不符合Java語法規則):

          for(String s: arr)
          {            
              
          for(String ss: arr)
              {
                  
          for(String sss: arr)
                  {
                      System.out.print(sss);
                      
          goto labelA;
                  }
              }               
          }
          labelA:

              當然,還可以使用continue labelA繼續執行某一層的循環,代碼如下:

          labelA:
          for(String s: arr)
          {            
              
          for(String ss: arr)
              {
                  
          for(String sss: arr)
                  {
                      System.out.print(sss);
                      
          continue labelA;
                  }
              }               
          }

               上面的代碼輸出“aaa”,讀者可以將上面的代碼理解為如下的形式(只是代碼形式,并不符合Java語法規則):

          for(String s: arr)
          {            
              
          for(String ss: arr)
              {
                  
          for(String sss: arr)
                  {
                      System.out.print(sss);
                      
          goto labelA;
                  }
              }               
          labelA:
          }

              當然,也可以按同樣的方法跳出或繼續第二層循環,代碼如下:

          for(String s: arr)
          {            
              labelA:
              
          for(String ss: arr)
              {
                  
          for(String sss: arr)
                  {
                      System.out.print(sss);
                      
          break labelA;
                  }
              }               
          }

              上面的代碼輸出“aaa”。

          for(String s: arr)
          {            
              labelA:
              
          for(String ss: arr)
              {
                  
          for(String sss: arr)
                  {
                      System.out.print(sss);
                      
          continue labelA;
                  }
              }               
          }

              上面的代碼輸出“aaaaaaaaa”。




          Android開發完全講義(第2版)(本書版權已輸出到臺灣)

          http://product.dangdang.com/product.aspx?product_id=22741502



          Android高薪之路:Android程序員面試寶典 http://book.360buy.com/10970314.html


          新浪微博:http://t.sina.com.cn/androidguy   昵稱:李寧_Lining

          posted on 2009-01-30 11:23 銀河使者 閱讀(3354) 評論(8)  編輯  收藏 所屬分類: java 原創

          評論

          # re: 跳出多層循環的簡單方法(Java版)  回復  更多評論   

          Java里可以用goto呀
          2009-01-30 15:23 | Robin's Java World

          # re: 跳出多層循環的簡單方法(Java版)  回復  更多評論   

          不可以的,我試了,編譯不過去。我用的是jdk6
          2009-01-30 16:13 | 銀河使者

          # re: 跳出多層循環的簡單方法(Java版)  回復  更多評論   

          @銀河使者
          可以呀,你再試試吧!
          2009-01-30 18:34 | Robin's Java World

          # re: 跳出多層循環的簡單方法(Java版)  回復  更多評論   

          象下面的程序可以嗎?
          String[] arr = new String[]{"a", "b", "c"};
          for(String s: arr)
          {
          for(String ss: arr)
          {
          for(String sss: arr)
          {
          System.out.print(sss);
          goto labelA;
          }
          }
          }
          labelA:

          不行啊,
          2009-01-30 19:27 | 銀河使者

          # re: 跳出多層循環的簡單方法(Java版)  回復  更多評論   

          @Robin's Java World
          我試了,的確不可以,就象java的const關鍵字,也不能使用,雖然是保留字。如果你有可以的例子,貼了來,讓我也學習一下。
          2009-01-30 19:33 | 銀河使者

          # re: 跳出多層循環的簡單方法(Java版)  回復  更多評論   

          路過學習
          2009-01-31 00:26 | 聊天室

          # re: 跳出多層循環的簡單方法(Java版)  回復  更多評論   

          @銀河使者
          不好意思,可能是我記錯了。
          2009-01-31 00:57 | Robin's Java World

          # re: 跳出多層循環的簡單方法(Java版)  回復  更多評論   

          JDK1.4可以用標簽不?
          2009-06-07 20:36 |
          主站蜘蛛池模板: 万源市| 兴安盟| 如皋市| 榕江县| 道孚县| 江阴市| 大田县| 新竹市| 任丘市| 嵊州市| 磐安县| 诸城市| 宁南县| 华坪县| 林芝县| 榆中县| 巧家县| 措勤县| 红安县| 高平市| 方正县| 原平市| 嘉义县| 隆安县| 木兰县| 岑巩县| 介休市| 榆中县| 图们市| 平利县| 江阴市| 华容县| 同心县| 贵港市| 太保市| 沁源县| 霍林郭勒市| 青神县| 温宿县| 师宗县| 德格县|