我试图找出三个整数之间的最小差异。它说:"运营商&&&'不能应用于' 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....
答案 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)))