功能错误:并非所有代码路径都返回一个值

时间:2018-03-26 16:14:18

标签: c#

请帮忙。我是c#的初学者,但之前已经在python中编程了。我的问题是它们是一个错误,它说,Severity'Program.Sqrt(int)':并非所有代码路径都返回一个值。请帮忙,我已经包含一个返回值,并使用了if和else语句。

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");

            }
        } 
    }
}

4 个答案:

答案 0 :(得分:1)

所以这只是C#Basics - 好......编程基础...... 如果您将方法声明为'类型'除了void之外的返回值,那么它希望您使用关键字' return'在某个阶段。

您创建了一个名为:

的方法
float Sqrt(int x)

这表明它必须返回一个浮点值。

我可以看到,在某些情况下(if语句)你正在做

return num;

但要仔细看。在其他if语句中,没有return语句 - 所以基本上,在else语句中它会被卡住。

为了确保您的方法不会卡住 - 您应该确保它有可能返回有效值,或者它会引发异常。

if (num * num == x)
            {

                return num;
            }
            else
            {
                throw new Exception("Unable to execute");
            }

答案 1 :(得分:1)

您收到的编译器错误最重要的部分是具有声明的返回类型的方法必须始终返回该类型的值,否则会抛出错误。

让我们来看看:

float Sqrt(int x)
{
    // Your code here
} 

我们刚刚完成的工作被声明为名为Sqrt的方法,该方法接受名为int的单个x参数。通过在方法开头使用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));
    }
}

上述代码有效,因为ifelse都返回了有效值。你的代码失败了,因为你的其他人没有返回任何东西;看到这个简化的例子:

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某种例外情况。

答案 2 :(得分:0)

由于错误明确说明,并非所有代码路径都返回一个值,这将引发异常。

if (num * num == x)
{

    return num; //Okay
}
else
{
    Console.WriteLine("FAILED TO EXECUTE");
    //returns nothing here
}

要解决此问题,只需在return返回前一条件失败后您想要的内容后添加Console.WriteLine语句。

答案 3 :(得分:0)

.NET编译器期望在函数的所有可能方案中使用return语句。如果代码失败,则返回编译错误。

您可以在else块中返回一些错误或不可能的值。因为在你的代码中,else没有返回任何值/异常,所以它会给出错误。