隨筆 - 312, 文章 - 14, 評(píng)論 - 1393, 引用 - 0
          數(shù)據(jù)加載中……

          跳出多層循環(huán)的簡(jiǎn)單方法(Java版)

          本文為原創(chuàng),如需轉(zhuǎn)載,請(qǐng)注明作者和出處,謝謝!

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

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

              如果要從第三層循環(huán)跳出第一層循環(huán),可以通過設(shè)置標(biāo)志的方法來實(shí)現(xiàn),但這比較麻煩。當(dāng)然,如何使用過C或C++的開發(fā)人員可以想到使用goto語(yǔ)句,如下面的代碼所示:

          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雖然還有g(shù)oto關(guān)鍵字,但這個(gè)關(guān)鍵字卻不能使用(Java編譯器會(huì)拋出異常)。不過Java還提供了另外一種類似goto的解決方案,這就是break n和continue n。其中n表示標(biāo)簽名。只是在Java中只能在for、while、do...while三種循環(huán)語(yǔ)句前面定義,標(biāo)簽與循環(huán)體之間不能有任何其他的語(yǔ)句,如下面的標(biāo)簽定義是合法的:

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

              下面的標(biāo)簽定義是不合法的:

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

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

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

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

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

              當(dāng)然,還可以使用continue labelA繼續(xù)執(zhí)行某一層的循環(huán),代碼如下:

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

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

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

              當(dāng)然,也可以按同樣的方法跳出或繼續(xù)第二層循環(huán),代碼如下:

          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開發(fā)完全講義(第2版)(本書版權(quán)已輸出到臺(tái)灣)

          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 銀河使者 閱讀(3355) 評(píng)論(8)  編輯  收藏 所屬分類: java 原創(chuàng)

          評(píng)論

          # re: 跳出多層循環(huán)的簡(jiǎn)單方法(Java版)  回復(fù)  更多評(píng)論   

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

          # re: 跳出多層循環(huán)的簡(jiǎn)單方法(Java版)  回復(fù)  更多評(píng)論   

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

          # re: 跳出多層循環(huán)的簡(jiǎn)單方法(Java版)  回復(fù)  更多評(píng)論   

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

          # re: 跳出多層循環(huán)的簡(jiǎn)單方法(Java版)  回復(fù)  更多評(píng)論   

          象下面的程序可以嗎?
          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: 跳出多層循環(huán)的簡(jiǎn)單方法(Java版)  回復(fù)  更多評(píng)論   

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

          # re: 跳出多層循環(huán)的簡(jiǎn)單方法(Java版)  回復(fù)  更多評(píng)論   

          路過學(xué)習(xí)
          2009-01-31 00:26 | 聊天室

          # re: 跳出多層循環(huán)的簡(jiǎn)單方法(Java版)  回復(fù)  更多評(píng)論   

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

          # re: 跳出多層循環(huán)的簡(jiǎn)單方法(Java版)  回復(fù)  更多評(píng)論   

          JDK1.4可以用標(biāo)簽不?
          2009-06-07 20:36 |
          主站蜘蛛池模板: 墨竹工卡县| 岳西县| 教育| 巨鹿县| 天津市| 卢龙县| 日照市| 乌什县| 开鲁县| 云霄县| 丰宁| 读书| 筠连县| 库伦旗| 翼城县| 安溪县| 邯郸市| 旬邑县| 章丘市| 射阳县| 资讯 | 宁乡县| 辉南县| 无极县| 江永县| 灌南县| 康马县| 肇州县| 宁南县| 于都县| 宜君县| 开原市| 花垣县| 临泽县| 康保县| 耿马| 台南市| 曲沃县| 右玉县| 盘山县| 鄂伦春自治旗|