运营商&&'不能应用于' int'类型的操作数。并且' bool' (最小差异)

时间:2017-03-27 19:00:59

标签: c# if-statement

我试图找出三个整数之间的最小差异。它说:"运营商&&&'不能应用于' int'类型的操作数。并且' bool'"。 我哪里错了?

 static void Main(string[] args)
    {
        int number1, number2;
        Console.WriteLine("Enter three numbers.");
        int x= int.Parse(Console.ReadLine());
        int y= int.Parse(Console.ReadLine());
        int z= int.Parse(Console.ReadLine());

        if(Math.Abs(x-y) < Math.Abs(y-z) && Math.Abs(x-z))
        {
            number= x;
            number= y;
        }
        else if....

3 个答案:

答案 0 :(得分:3)

问题在于Math.Abs(x-y) < Math.Abs(y-z) && Math.Abs(x-z),特别是&& Math.Abs(x-z)

我认为你想说的是| x - y | &LT; {| y - z | ,| x - z | } 换句话说,x-y的绝对值小于y-z的绝对值,也小于x-z的绝对值。

&LT;是一个运算符,它接受两个操作数,在这种情况下,是两个整数。 &安培;&安培;是另一个运算符,它采用两个bool操作数。为了能够表达你想要做的事情,&amp;&amp;运营商必须做的不仅仅是鼓励,因为现在你的&amp;&amp;周围有一个bool和int。这表明这一点更清楚......

bool isLessThan = Math.Abs(x - y) < Math.Abs(y - z);
if (isLessThan && Math.Abs(x - z))
{
    ...
}

if语句会出错,因为&amp;&amp;运营商不知道如何比较bool和int。 您应该将其更改为此以修复它...

int xMinusY = Math.Abs(x - y);
if (xMinusY < Math.Abs(y - z) && xMinusY < MAth.Abs(x - z))
{
    ...
}

答案 1 :(得分:2)

 static void Main(string[] args)
    {
        int number1, number2;
        Console.WriteLine("Enter three numbers.");
        int x = int.Parse(Console.ReadLine());
        int y = int.Parse(Console.ReadLine());
        int z = int.Parse(Console.ReadLine());

        if ((Math.Abs(x - y) < Math.Abs(y - z)) && (Math.Abs(x - y) < (Math.Abs(x - z))
        {
            number1 = x;
            number2 = y;
        }

您可以像这样解决此问题。

答案 2 :(得分:0)

Math.Abs​​(x-z)本身并不解析为布尔值。如果您打算使用布尔值的整数表示(0为假,!0为真),则只需转换

if(Math.Abs(x-y) < Math.Abs(y-z) && Convert.ToBoolean(Math.Abs(x-z)))