请帮助。我是C#的居民,但以前曾在Python进行编程。我的问题是,它们是一个错误,上面是"严重性"。请提供帮助,我包含一个返回值,并使用了if和其他语句。
using System;
namespace helloworld
{
class Program
{
static void Main(string[] args)
{
}
float Sqrt(int x)
{
Console.WriteLine("please enter your number to be square rooted");
string l = Console.ReadLine();
x = Convert.ToInt32(l);
float num = 1;
if (num * num != x)
{
num++;
}
if (num * num == x)
{
return num;
}
else
{
Console.WriteLine("FAILED TO EXECUTE");
}
}
}
}
所以这只是C#基础知识 - 好..编程基础...如果将方法声明为"返回值类型"以外的void,则希望您在某个阶段使用关键字"返回"。
您创建了一种称为:
的方法float Sqrt(int x)
这表明它必须返回浮点值。
我可以看到在某些情况下(如果语句(,您正在做
return num;
但要仔细地看。在另一个if语句中,没有返回语句 - 因此,基本上,在其他语句中,它将被卡住。
为了确保您的方法不会被卡住 - 您应该确保它具有返回有效值或引发异常的可能性。
if (num * num == x)
{
return num;
}
else
{
throw new Exception("Unable to execute");
}
您收到的编译器错误的最重要部分是,具有声明的返回类型的方法必须始终返回该类型的值或丢弃错误。
让我们看一下:
float Sqrt(int x)
{
// Your code here
}
我们刚刚完成的工作是一种称为Sqrt
的方法,该方法接受一个称为x
的int
参数。通过在方法开头使用float
类型,我们指出此方法始终返回float。
在您的方法主体中,您必须返回浮子或丢弃错误。让我们看一个简单的情况。
float Sqrt(int x)
{
if (x > 0)
{
// Calculate square root
return Math.Sqrt(x);
}
else
{
// Ignore imaginary numbers for now, use absolute value
return Math.Sqrt(Math.Abs(x));
}
}
上面的代码工作是因为if
和else
都返回有效的值。您的代码失败了,因为您的其他任何东西都没有返回任何内容;请参阅此简化的示例:
float Sqrt(int x)
{
if (x > 0)
{
// Calculate square root
return Math.Sqrt(x);
}
else
{
// Ignore imaginary numbers for now, use absolute value
Console.WriteLine("Don't do that!");
// Note there is no return statement here
}
}
上面的示例失败,因为else
不返回任何内容,也不会引发异常。交付这一点的另一种方法是提出适当的例外:
float Sqrt(int x)
{
if (x > 0)
{
// Calculate square root
return Math.Sqrt(x);
}
else
{
// Ignore imaginary numbers for now, use absolute value
throw new System.ArgumentException("x must be greater than 0");
}
}
上面的示例假定您的代码知道如何处理异常。在if else
部分中,您可以执行逻辑,但必须返回float
值或throw
的例外。
正如该错误清楚地说明的,并非所有代码路径返回一个值,这将引发异常。
if (num * num == x)
{
return num; //Okay
}
else
{
Console.WriteLine("FAILED TO EXECUTE");
//returns nothing here
}
要解决此问题,只需在Console.WriteLine
之后添加return
语句,如果以前的条件失败,请返回您想要的内容。
.net编译器期望在函数的所有可能方案中返回语句。如果代码失败,则返回编译错误。
您可以在其他块中返回某些错误或不可能的值。由于在您的代码中,否则没有返回任何值/异常,因此会出现错误。