c#返回错误“并非所有代码路径返回值”

时间:2014-01-17 20:47:33

标签: c# return

我正在尝试编写代码,返回给定的整数是否可以被1到20均分,但是我一直收到以下错误:

  

错误CS0161:'ProblemFive.isTwenty(int)':并非所有代码路径都返回值

这是我的代码:

public static bool isTwenty(int num)
{
    for(int j = 1; j <= 20; j++)
    {
        if(num % j != 0)
        {
            return false;
        }
        else if(num % j == 0 && num == 20)
        {
            return true;
        }
    }
}

8 个答案:

答案 0 :(得分:71)

您错过了return声明。

当编译器查看您的代码时,它会看到可能发生但不返回值的第三条路径(您未编码的else)。因此not all code paths return a value

对于我的建议修复,我在循环结束后放了一个return。另一个显而易见的地方 - 向else添加return if-else-if的{​​{1}}会破坏for循环。

public static bool isTwenty(int num)
{
    for(int j = 1; j <= 20; j++)
    {
        if(num % j != 0)
        {
            return false;
        }
        else if(num % j == 0 && num == 20)
        {
            return true;
        }
    }
    return false;  //This is your missing statement
}

答案 1 :(得分:8)

编译器没有得到你在循环的最后一次迭代中返回的错综复杂的逻辑,所以它认为你可以退出循环并最终没有返回任何东西。

不是在最后一次迭代中返回,而是在循环后返回true:

public static bool isTwenty(int num) {
  for(int j = 1; j <= 20; j++) {
    if(num % j != 0) {
      return false;
    }
  }
  return true;
}

旁注,原始代码中存在逻辑错误。您正在检查上一个条件中是否为num == 20,但您应该检查j == 20是否为num % j == 0。还要检查{{1}}是否超级丰富,因为当你到达那里时总是如此。

答案 2 :(得分:6)

我也遇到了这个问题,并找到了简单的解决方案

public string ReturnValues()
{
    string _var = ""; // Setting an innitial value

    if (.....)  // Looking at conditions
    {
        _var = "true"; // Re-assign the value of _var
    }

    return _var; // Return the value of var
}

这也适用于其他返回类型,并且提供的问题最少

我选择的初始值是一个后备值,我能够根据需要重新分配该值。

答案 3 :(得分:3)

我喜欢打死马,但我只是想补充一点:

首先,问题是并非所有控制结构的条件都已得到解决。基本上,你是说a,然后这个,否则如果b,那么这个。结束。但如果两者都没有呢?没有办法退出(即并非每个'path'都返回一个值)。

我的另一点是,这是一个例子,说明为什么你应该在可能的情况下瞄准单一出口。在这个例子中,你会做这样的事情:

bool result = false;
if(conditionA)
{
   DoThings();
   result = true;
}
else if(conditionB)
{
   result = false;
}
else if(conditionC)
{
   DoThings();
   result = true;
}

return result;

所以在这里,你总是一个return语句,并且该方法总是在一个地方退出。需要考虑的几件事情......你需要确保退出值在每条路径上都有效或至少是可接受的。例如,此决策结构仅考虑三种可能性,但单一退出也可以作为您的最终else语句。或者是吗?您需要确保最终返回值在所有路径上都有效。这是一个更好的方法来接近它,而不是有5000万个退出点。

答案 4 :(得分:3)

或者只是做这个东西:

public static bool isTwenty(int num)
{
   for(int j = 1; j <= 20; j++)
   {
      if(num % j != 0)
      {
          return false;
      }
      else if(num % j == 0 && num == 20)
      {
          return true;
      }
      else
          return false; 
      }

}

答案 5 :(得分:1)

看一下这个。它是C#中的三元运算符。

bool BooleanValue = (num % 3 != 0) ? true : false;

这只是为了说明原则;您可以返回True或False(甚至整数或字符串),具体取决于问号左侧的结果。好运营商,这个。

三个替代方案:

      public bool test1()
        {
            int num = 21;
            bool BooleanValue = (num % 3 != 0) ? true : false;
            return BooleanValue;
        }

        public bool test2()
        {
            int num = 20;
            bool test = (num % 3 != 0);
            return test;
        }

更短:

public bool test3()
{
    int num = 20;
    return (bool)(num % 3 != 0);
}

答案 6 :(得分:1)

class Program
{
    double[] a = new double[] { 1, 3, 4, 8, 21, 38 };
    double[] b = new double[] { 1, 7, 19, 3, 2, 24 };
    double[] result;


    public double[] CheckSorting()
    {
        for(int i = 1; i < a.Length; i++)
        {
            if (a[i] < a[i - 1])
                result = b;
            else
                result = a;
        }
        return result;
    }

    static void Main(string[] args)
    {
        Program checkSorting = new Program();
        checkSorting.CheckSorting();
        Console.ReadLine();
    }
}

这应该可以工作,否则我得到的错误是并非所有代码路径都返回一个值。因此我将结果设置为返回值,该值设置为B或A,具体取决于哪个为真

答案 7 :(得分:0)

如果我放错了return语句,这通常发生在我身上,例如: enter image description here

添加return语句,或者以我为例,将其移至正确的范围将达到目的: enter image description here