這裏是我的代碼的模式:繼續;用於跳過許多循環
while (..)
{
for (...; ...;...)
for(...;...;...)
if ()
{
...
continue;
}
}
什麼會做下去?他只會讓第二個循環迭代一次,不是? 我希望能達到這個時間,有可能嗎?
謝謝!
這裏是我的代碼的模式:繼續;用於跳過許多循環
while (..)
{
for (...; ...;...)
for(...;...;...)
if ()
{
...
continue;
}
}
什麼會做下去?他只會讓第二個循環迭代一次,不是? 我希望能達到這個時間,有可能嗎?
謝謝!
在這裏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
}
我認爲這是我需要;) 非常感謝!據我所知,不應該使用轉到 – Flo 2011-01-28 10:10:31
只有continue語句不可能。繼續和斷開語句隻影響它們嵌套的最內層循環。
您可以設置一個變量並在外部循環中檢查它。或者在for語句中重新組織IF語句和break條件。
while (..)
{
for (...; ...;...)
{
for(...;...;...)
if ()
{
...
skipLoop = true
}
if (skipLoop)
continue;
}
}
希望這有助於!
噢:( 我希望有一種方式存在,但...順便說一句,謝謝;) – Flo 2011-01-28 09:25:56
不可能直接爲continue;
不僅延續當前循環的執行,去外環你能做的唯一的事情就是設置一些標誌,並檢查它在外環
continue
或break
始終是最內環,其接受一個continue
或break
。在這種情況下,它是代碼中最低的for
循環。
while (..)
{
for (...; ...;...)
for(...;...;...)
if ()
{
...
goto superpoint;
}
superpoint:
//dosomething
}
您應該設置一個變量來確定何時需要離開循環。
while (..)
{
bool goToWhile = false;
for (...; ... && !goToWhile; ...)
for (...; ... && !goToWhile; ...)
if ()
{
...
goToWhile = true;
}
}
拿出更好的名字雖然;)
你應該避免內循環可言,他們使代碼不可讀和高度容易出錯。 – onof 2011-01-28 09:33:23
@onof我不同意,至少部分。有時候「內部循環」真的是解決問題的最好方法(有時候另一種控制抽象或方法調用更好)。然而,我相信循環結構應該總是使用一個`{}`,因爲它有助於縮進,並且避免了在循環中混淆內容 - 不在一個循環的問題。 – 2011-01-28 09:47:20