2011-01-28 84 views
3

這裏是我的代碼的模式:繼續;用於跳過許多循環

while (..) 
{ 
    for (...; ...;...) 
     for(...;...;...) 
      if () 
      { 
       ... 
       continue; 
      } 
} 

什麼會做下去?他只會讓第二個循環迭代一次,不是? 我希望能達到這個時間,有可能嗎?

謝謝!

+1

你應該避免內循環可言,他們使代碼不可讀和高度容易出錯。 – onof 2011-01-28 09:33:23

+0

@onof我不同意,至少部分。有時候「內部循環」真的是解決問題的最好方法(有時候另一種控制抽象或方法調用更好)。然而,我相信循環結構應該總是使用一個`{}`,因爲它有助於縮進,並且避免了在循環中混淆內容 - 不在一個循環的問題。 – 2011-01-28 09:47:20

回答

5

在這裏continue影響最近的環 - 你的第二個for。還有直接跳轉到while的方法有兩種:

  • goto,雖然有時是「有害」,這可以說是爲什麼它仍然存在
  • return

爲了說明的主要原因後者:

while (..) 
{ 
    DoSomething(..); 
} 

void DoSomething(..) { 
    for (...; ...;...) 
     for(...;...;...) 
      if () 
      { 
      ... 
      return; 
      } 
} 

和前者:

while (..) 
{ 
    for (...; ...;...) 
     for(...;...;...) 
      if () 
      { 
       ... 
       goto continueWhile; 
      } 
    continueWhile: 
     { } // needs to be something after a label 
} 
+0

我認爲這是我需要;) 非常感謝!據我所知,不應該使用轉到 – Flo 2011-01-28 10:10:31

0

只有continue語句不可能。繼續和斷開語句隻影響它們嵌套的最內層循環。

您可以設置一個變量並在外部循環中檢查它。或者在for語句中重新組織IF語句和break條件。

while (..) 
{ 
    for (...; ...;...) 
    { 
     for(...;...;...) 
      if () 
      { 
       ... 
       skipLoop = true 
      } 
     if (skipLoop) 
      continue; 
    } 
} 

希望這有助於!

+0

噢:( 我希望有一種方式存在,但...順便說一句,謝謝;) – Flo 2011-01-28 09:25:56

1

不可能直接爲continue;不僅延續當前循環的執行,去外環你能做的唯一的事情就是設置一些標誌,並檢查它在外環

1

continuebreak始終是最內環,其接受一個continuebreak。在這種情況下,它是代碼中最低的for循環。

2
while (..) 
{ 
    for (...; ...;...) 
     for(...;...;...) 
      if () 
      { 
       ... 
       goto superpoint; 
      } 
superpoint: 
//dosomething 
} 
2

您應該設置一個變量來確定何時需要離開循環。

while (..) 
{ 
    bool goToWhile = false; 

    for (...; ... && !goToWhile; ...) 
     for (...; ... && !goToWhile; ...) 
      if () 
      { 
       ... 
       goToWhile = true; 
      } 
} 

拿出更好的名字雖然;)