0

我试图找出一个数字是否是素数。但是我遇到了“检测到无法访问的代码”的错误,我认为这会影响“并非所有代码路径都返回值”的错误。该错误似乎发生在 i++ 的 for 循环中。任何人都可以帮助我吗?

static void Main(string[] args)
    {
        Console.WriteLine(isPrime(10));
    }

    public static bool isPrime(int n)
    {
        for (int i = 2; i < n; i++)
        {
            if (n % i == 0)
            {
                return false;
            }
            return true;
        }
    }
4

2 回答 2

10

“检测到无法访问的代码”意味着某些代码永远无法执行。考虑:

int something()
{
  if (true)
    return 1;
  else
    return 2; //Obviously we can never get here
}

“并非所有代码路径都返回一个值”意味着您已经定义了一个具有返回值的方法(例如您的示例中的“bool”),并且该方法有某种方式可以在不返回值的情况下执行。

考虑:

int something(bool someBool)
{
  if (someBool)
    return 1;
  //if someBool == false, then we're not returning anything.  Error!
}
于 2014-11-21T17:59:03.517 回答
5

您的代码有两个问题:

  1. return true在 for 循环内(在任何条件之外)。因为return立即退出函数(将控制权返回给调用者)循环i++语句for将永远不会被执行(因此你的错误)。您可能打算将其置于 for 循环之外。

  2. 在循环中的另一个问题是循环不能保证执行。如果n传递的是 2 或更少,您将完全跳过循环,并且在这种情况下没有 return 语句。这是不允许的(因为您总是需要从非 void 函数返回一个值),因此您会收到编译器错误。

于 2014-11-21T17:59:28.137 回答