2012-09-13 172 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)));