がゼロの場合i
、実行中のループを最初に実行する0 % 0
と、ゼロ除算エラーが発生します。
あなたの機能が何をしようとしているのかについては、私にはわかりません。ここでは、素数に関連するものは何も見当たりません。より小さいすべての偶数を見つけているだけですn
。
if
テストを見てみましょう。
if ((i % 2 == 0) && (i % i == 0))
2 番目の部分は、そうでないi % i == 0
限り常に true になります。だからその部分は偽物です。そして、偶数かどうかを単純にテストします。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);
もう 1 つのポイントは、コードのバージョンが素数性テストを I/O コードと混合していることです。すべてを 1 つの大きなルーチンにまとめると、コードの理解とデバッグが難しくなります。ここで説明するように、素数性テストを別の関数に分割すると、その正確性をより簡単に確認できます。正しいことがわかったら、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();