当i
为零时,您正在执行的第一次循环会0 % 0
导致除以零错误。
至于您的功能要做什么,我不知道。我在这里看不到任何与质数相关的东西。您只是找出所有小于 的偶数n
。
让我们看一下if
测试:
if ((i % 2 == 0) && (i % i == 0))
第二部分,i % i == 0
只要i
不是,就永远是真的0
。所以那部分是虚假的。并i % 2 == 0
简单地测试是否i
是偶数。
您的代码实际上打算做什么?您是否正在尝试测试一个数字是否是素数?如果是这样,最简单的方法是这样的:
static bool isPrime(int n)
{
Debug.Assert(n>0);
for (int i=2; i<n; i++)
if (n % i == 0) // n is exactly divisible by i, so n is not prime
return false;
return true; // we could not find a factor, so n must be prime
}
您当前的代码无法输出任何数字,因为您的调用Console.WriteLine
不完全正确。你的意思是:
Console.WriteLine("The prime numbers are: {0}", a);
要说明的另一点是您的代码版本将素数测试与 I/O 代码混合在一起。将它们混合在一个大例程中会使您更难理解和调试代码。正如我在此处说明的那样,将素性测试拆分为一个单独的函数,您可以更轻松地检查其正确性。一旦你知道它是正确的,你就可以从你的 IO 代码中使用它。然后你可以专注于让你的 IO 代码正确。这可能看起来像这样:
Console.Write("Enter your number: ");
int n = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("The prime numbers are:");
for (int i = 1; i <= n; i++)
if (isPrime(i))
Console.WriteLine(i);
Console.ReadLine();