2012-09-13 221 views
0

在井字腳趾代碼同時檢查兩個條件,我有一個do-while循環來檢查,如果一個玩家有won..so,像這樣在do-while循環

do{ 
//does some player's input and other things.. 
}while(!win(x)); 

現在,最大的問題是在這個循環中,它將繼續循環直到其中一個玩家獲勝。 現在,我如何使用同一個do-while循環檢查領帶?

我可以做這樣的事情:

do{ 
//still the same checking 
}while(!win(x)||!loose(x)); 

我也試試這個,但它只是搞砸的代碼。我怎麼可能在比賽中檢查一個領帶?

由於

+0

你不能重構代碼有一個'winOrDraw(X)'函數? – Nick

+0

也許你可以擁有一個「完成」的標誌,當某人獲勝或網格被填滿時標誌就會被標記。然後有'while(!finished)'。 – BoBTFish

+0

從這段小小的代碼中無法分辨出來。使用'} while(gameIsNotOver());'... – tenfour

回答

2

你的邏輯稍微偏離 - 改變環路狀態從:

do{ 
//still the same checking 
}while(!win(x)||!loose(x)); 

到:

do{ 
//still the same checking 
}while(!win(x)&&!loose(x)); 

或也許更易於理解,但等效的替代:

do{ 
//still the same checking 
}while(!(win(x)||loose(x))); 
+3

德摩根定律每次都會給你...基本上你想檢查的不是('win(x)or lose(x)')。但是你忘了否定表達的所有部分。 '或'進入'和'(反之亦然)。進一步澄清@Paul R建議的內容。 – willkill07

+0

@ willkill07:是的,好點 - 我現在增加了一個替代方案來解釋德摩根的答案。 –

+0

令人驚訝的是人類的大腦如何處理不了德摩根的法則。 – john

0

當你寫:

!win(x)||!loose(x) 

你說不是贏了還是不會丟失,循環將在第一次去終止。您可以使用以下方法:

do{ 
    //still the same checking 
} while (!win(x)&&!loose(x)); 

do{ 
    //still the same checking 
} while (!(win(x)||loose(x)));