2016-10-15 40 views
1

我完全陌生于C# - 只是尝试一些简单的东西。 我想用if/else语句找出最多三个数字。我试着写这种方法:C# - 使用if/else语句查找最多3个数字

public int Maximum(int num1, int num2, int num3) 
    { 
     if (num2 <num1> num3) 
     { 
      return num1; 
     } 

     else if (num1 <num2> num3) 
     { 
      return num2; 
     } 

     else if (num1 <num3> num2) 
     { 
      return num3; 
     } 
    } 

但我有点困惑。

Q1 - 通过说“int Maximum”,我是否还需要声明每个参数是一个int(或者相反)?还是一切都需要声明其数据类型?

Q2 - 告诉我“Operator'>'不能应用于bool和int类型的操作数吗?我很困惑我应该在这里做什么。我做错了什么或有其他选择吗?

感谢您的任何帮助。

+0

什么是你参考材料?你在学习怎么样? – Amit

+0

没有什么特别的东西。刚刚搜索基础 – Dovahkiin

+0

第一季度,如果我理解的权利,是的,你需要申报每个参数类型。当你声明int最大值时,你声明女巫类型将返回函数,那么你必须声明变量的类型,你将传递给函数 –

回答

4

关于Q1

C#是strongly typed语言。这意味着你必须明确地告诉编译器你的参数,变量,成员甚至你的方法返回值的类型。

这与其他强类型语言(如Java或C++)类似。

P.S:最新C#的关键字(如vardynamic)试图从一个强类型的环境中移动C#至混合之一。

关于Q2

num <num2> num3不是有效的条件表达式。

num < num2产生一个bool,所以下面的表达式num <num2> num3将相当于bool > num3,这是无效的,因为你不能比较一个布尔值,像这样一个int。

什么你要找的是Conditional AND (&&)操作:

if (num < num2 && num2 > num3) 
{ 
    return num2; 
} 

或者,您也可以使用嵌套if语句来实现相同的行为:

if (num < num2) 
{ 
    if (num2 > num3) 
    { 
     return num2; 
    } 
} 

关于你的代码

您提供的代码有另一个问题。

如果三个条件都不符合会发生什么?该方法会返回什么?

当然,您知道不可能满足三个条件,但编译器不知道这个

你必须要么返回一个空值,或删除您的最后else if:括号(内

public int Maximum(int num1, int num2, int num3) 
{ 
    if (num2 < num1 && num1 > num3) 
    { 
     return num1; 
    } 

    else if (num1 < num2 && num2 > num3) 
    { 
     return num2; 
    } 

    // If we reached this point, we know that num3 is the biggest of them all 
    else 
    { 
     return num3; 
    } 
} 
2

声明)必须导致真或假。由于您没有比较两个值,因此写入的方式不起作用。相反,你应该写:

public int Maximum(int num1, int num2, int num3) 
{ 
    if ((num2 < num1) && (num1 > num3)) 
    { 
     return num1; 
    } 

    else if ((num1 < num2) && (num2 > num3)) 
    { 
     return num2; 
    } 

    else 
    { 
     return num3; 
    } 
} 
+0

除非将方法签名声明为public int,否则不能写'return null'?最大(...)'。通常你会抛出一些Invalid * -Exception。 – SharpShade

+0

我在那里犯了一个错误,因为他们是如果陈述。他们将永远不会返回null。虽然它说它会返回一个int,但我相信它有可能返回一个空值。该变量只需要为空即可。 –

+0

我已编辑相应。 SharpShade,你是对的。 –

1

A1:是的,你必须声明所有参数的类型。参数类型与您的返回类型无关。 A2:你期望你的if语句有一个bool值,但是(n2 < n1> n3)表示(n2 < n1)> n3 - > bool> int。您无法将布尔值与整数进行比较。

如果你真的想这样做的,如果别的办法,

if(num1 > num2) 
{ 
    if(num1 > num3) 
     return num1; 
    else 
     return num3; 
} 
else 
{ 
    if(num2 > num3) 
     return num2; 
    else 
     return num3; 
} 
2

我认为基本的答案会是这样的你(一个新的学习):

int num1 = 1, num2 = 2, num3 = 3; 
int max; 
if (num1 >= num2) 
{ 
    if (num3 >= num1) 
    { 
     max = num3; 
    } 
    else 
    { 
     max = num1; 
    } 
} 
else 
{ 
    if (num3 >= num2) 
    { 
     max = num3; 
    } 
    else 
    { 
     max = num2; 
    } 
}