我有一个函数,应该检查数组是否在某个位置包含字母X或O.我这样做是因为如果该元素中不存在X或O,它会将X或O插入该元素中。但由于某种原因它不起作用。如果说X在元素中并且其O转向将其放入其中只是放入O并且不告诉我该移动已经完成。
也许我搞砸了我的设计?
void makeMove()
{
if ( choosePositionX )
{
if (ticTacBoard[choosePositionX - 1] != 'X' || ticTacBoard[choosePositionX - 1] != 'O' )
{
ticTacBoard[choosePositionX - 1] = 'X';
}
else
cout << "Player O has already made this move" << endl << endl;
}
if ( choosePositionO )
{
if (ticTacBoard[choosePositionO - 1] != 'X' || ticTacBoard[choosePositionO - 1] != 'O' )
{
ticTacBoard[choosePositionO - 1] = 'O';
}
else
cout << "Player X has already made this move" << endl << endl;
}
}
答案 0 :(得分:3)
应该&amp;&amp;&amp;而不是||
因为在这种情况下,if条件将始终返回true。
如果您希望这两个条件都必须为真,那么请使用&amp;&amp;&amp;&#39;但是我想你正在对字面意思采取OR,如果你想要只有一个给定的条件必须是真的,而不是使用下面的表达式
如果你想实现,两者中的任何两个条件都是真的,那么基本上你正在尝试XOR操作,这可以像这样实现
if ((ticTacBoard[choosePositionX - 1] != 'X' || ticTacBoard[choosePositionX - 1] != 'O' )
&& ! (ticTacBoard[choosePositionX - 1] != 'X' && ticTacBoard[choosePositionX - 1] != 'O' ))
上述条件将确保其中只有一个为TRUE。 either
X或O
没有测试过这种情况,请原谅任何错误,这是一个想法
答案 1 :(得分:0)
无论它有什么价值,它总是要么不是X而不是O.你检查它是不是-X OR not-O。那个测试永远都是真的。
您想要检查是 X还是是 O.在这种情况下,已经采取了此举措。变化:
if (ticTacBoard[choosePositionX - 1] != 'X' || ticTacBoard[choosePositionX - 1] != 'O' )
{
ticTacBoard[choosePositionX - 1] = 'X';
}
else
cout << "Player O has already made this move" << endl << endl;
到
if (ticTacBoard[choosePositionX - 1] != 'X' && ticTacBoard[choosePositionX - 1] != 'O' )
{
ticTacBoard[choosePositionX - 1] = 'X';
}
else
cout << "Player " << ticTacBoard[choosePositionX - 1] << " has already made this move" << endl << endl;
如果玩家成功移动,您需要更改下一个玩家。如果没有,你需要让同一个玩家再试一次。