while (playerMove != "SCISSORS" || playerMove != "PAPER" && playerMove != "ROCK" || string.IsNullOrEmpty(playerMove))
{
Console.WriteLine("Please enter a valid command!");
playerChoice = Console.ReadLine().ToUpper().Trim();
continue;
}
有人可以向初级程序员解释为什么这段代码不起作用。 我自己阅读这段代码的方式是: 虽然 playerMove 不是“SCISSORS”或“PAPER”,也不是“ROCK”或 Empty,但执行此操作...
我如何使它工作?
最佳答案
如果您输入“PAPER”,则 playerMove != "SCISSORS"
为真,因此您的 while 条件为真,因为逻辑或只有一部分必须为真。
您希望 所有 !="XYZ"
为真,或者字符串为空:
while((playerMove != "SCISSORS" && playerMove != "PAPER" && playerMove != "ROCK") || string.IsNullOrEmpty(playerMove))
也就是说,可能有更简单的方法来检查这一点。
例如,您可以定义一个可接受的字符串列表,并对其进行检查:
using System.Linq;
...
var acceptedString = new List<string> {"ROCK", "PAPER", "SCISSORS"};
...
while (!acceptedStrings.Contains(playermove)
{
// error message
}
实际上检查空字符串是没有用的,因为空字符串永远不会有可接受的值。
如评论中所述,另一种选择是将您的条件提取到方法中。对于复杂的情况,这几乎总是一个好主意:
while (!IsValid(playermove)){...}
...
private static bool IsValid(string move)
{
return move == "ROCK"
|| move == "PAPER"
|| move == "SCISSORS";
}
或者您可以将其重写为
while (!IsValid(playermove)){...}
...
private static bool IsValid(string move) =>
move == "ROCK" || move == "PAPER" || move == "SCISSORS";
关于c# - c#中的多个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55206537/