2012-10-31 37 views
3

我不明白爲什麼繼續在這裏的原因錯誤繼續不能在循環外使用(這是不是外面實際上)

public void clear() { 

    log.debug("Clearing hash"); 

    // wow! 
    while(hash.size()>0) { 

     for(Map.Entry<Node,Node> entry : hash.entrySet()) { 

      clearingParents: { 

       while(entry.getKey().ups.size() > 0) { 

        for(Node node : entry.getKey().ups) { 

         log.debug("Clearing {}, hash size is {}", node, hash.size()); 
         if(node.sizeUps() == 0) { 
          node.clear(); 
          continue clearingParents; 
         } 
         else { 
          log.debug("was skipped since inserted"); 
         } 
        } 

        break clearingParents; 
       } 
      } 

     } 


    } 

我使用的,因爲node.clear該方案()導致迭代器出現破

+0

Nooooooo! !這段代碼被詛咒!圓形複雜性和標籤,你有沒有尊重Dijkstra?!? – rees

回答

5

你標記一個塊而不是while循環。 可以breaklabeled block,但不continuelabeled block 它沒有任何意義continue a labeled block因爲它不是一個循環 標籤你的循環一樣在標註以下

clearingParents: while(entry.getKey().ups.size() > 0) { 

         for(Node node : entry.getKey().ups) { 

          log.debug("Clearing {}, hash size is {}", node, hash.size()); 
          if(node.sizeUps() == 0) { 
           node.clear(); 
           continue clearingParents; 
          } 
          else { 
           log.debug("was skipped since inserted"); 
          } 
         } 

         break clearingParents; 
        } 

研究循環here