我对C#很新,并尝试制作文本库主脑,但是当我尝试检查用户的回答是否与3个数字相同时,我得到了这个错误。 “运算符”||“不能应用于'bool'和'int'类型的操作数”
Random rnd = new Random();
int pos1 = rnd.Next(1, 6); //generates random numbers
int pos2 = rnd.Next(1, 6);
int pos3 = rnd.Next(1, 6);
int pos4 = rnd.Next(1, 6);
int answer1 = Convert.ToInt32(Console.ReadLine());
if (asnwer1 == pos1) //checks if answer is the same as pos1
{
Console.WriteLine("Right");
}
else if (answer1 == pos2 || pos3 || pos4)
{
Console.WriteLine("Wrong");
}
else {
Console.WriteLine("Nope");
答案 0 :(得分:5)
所有条件都应返回bool
结果。 pos3
和pos4
为int
- 您应该与answer1
进行比较。
您应该重写else if
:
else if (answer1 == pos2 || answer1 == pos3 || answer1 == pos4)
答案 1 :(得分:1)
if (new[] {pos2,pos3,pos4}.Contains(answer1))
答案 2 :(得分:0)
待办事项
else if (answer1 == pos2 || answer1 == pos3 || answer1 == pos4)
理想情况下,您的代码应为
Console.WriteLine(answer1 == pos1 ? "Correct": "Incorrect");
答案 3 :(得分:0)
||
等逻辑运算符要求您双方都bool
ean值left || right
。在您的示例中,您有第一个类型为bool
的操作数,其次是int
个egers。这没有任何意义。
为了能够比较你的答案是否等于这三个值,你必须在类似条件的陈述(answer == posX
)中使用它们,其中X
是你的位置号码。
你的工作代码示例:
else if (answer1 == pos2 || answer1 == pos3 || answer1 == pos4 )
// do some logic here ...
将此扩展为更多" generic"方式,每个操作数必须提供bool
ean值:
if ( true || false || ... )
但是因为将原始bool
ean值打包成这样的内容并不会有所帮助:
bool a = answer1 == pos2;
bool b = answer1 == pos3;
if ( a || b ... )
您实际上可以编写类似您尝试过的条件:
if ( operandL == operandR || operandL != operandR || ... )
答案 4 :(得分:0)
我认为,
else if (answer1 == pos2 || pos3 || pos4)
你的意思是" answer1等于pos2,pos3或pos4"。
但是,这不是正确的语法。正如错误消息所述,它期望||
内的所有内容都是布尔表达式,而pos3
和pos4
肯定不是布尔值。
您可以编写如下的扩展方法:
public static class Extensions
{
public static bool In<T>(this T item, params T[] args)
{
foreach (T arg in args)
{
if (arg.Equals(item))
return true;
}
return false;
}
}
或者更简单:
public static class Extensions
{
public static bool In<T>(this T item, params T[] args)
{
return args.Contains(item);
}
}
然后你可以写answer1.In(pos2, pos3, pos4)
。