这里有两个问题:
虽然返回值问题是一个错误,并且会阻止您的编译完成,但无法访问的代码只是一个警告。“只是”我的意思是它不一定会停止您的编译,但您应该将其视为错误的指示。
让我写一个新的例子来显示这里的实际问题:
public static bool primeNumber (int num)
{
for (int i = 0; i < num; i++)
{
if (i < 10)
return false;
else
return true;
}
}
让我们看看这个方法做了什么:
- 它开始一个循环
- 循环中的第一件事是检查一些东西
- 根据 this something,它会返回 this 或 that。它返回
因此,它永远不会到达这一点:
for (int i = 0; i < num; i++)
^^^
这是无法访问的代码。
其次,在您的情况下,编译器无法判断是否num
总是一个允许循环运行的值,因此总是返回一些东西。因此,编译器认为您有可能有一个num
(在我的示例中可能是-1)值,该值不允许循环运行,使程序跳过循环,因此我们最终得到另一个错误,那么该方法应该返回什么?
如果我们回到您的代码,这是一种重写方法的方法
public static bool primeNumber ()
{
Console.Write ("Please enter a number to see if it is a prime number: ");
int num = int.Parse (Console.ReadLine ());
if (num % 2 == 0)
return false;
else if (num % 5 == 0)
return false;
else {
for (int i = 3; i < num / 2; i += 2)
{
if (num % i == 0)
return false;
}
return true;
}
}
- 如果我们遇到一个证明测试的数字(即它不是质数),则只在循环中返回,我们将消除无法访问的代码问题
- 然后,如果我们设法完成循环,我们无法证明它不是质数,因此它是质数,然后我们返回
true
。
意见:您不应该有一个提示用户然后返回答案的功能。相反,我会编写这个(LINQPad)程序:
void Main()
{
Console.Write ("Please enter a number to see if it is a prime number: ");
int num = int.Parse (Console.ReadLine ());
if (primeNumber(num))
Console.WriteLine(num + " is a prime number");
else
Console.WriteLine(num + " is a not prime number");
}
public static bool primeNumber (int num)
{
if (num % 2 == 0)
return false;
else if (num % 5 == 0)
return false;
else {
for (int i = 3; i < num / 2; i += 2)
{
if (num % i == 0)
return false;
}
return true;
}
}