用数组输出0-10000的所有质数
Outputting all prime numbers from 0-10000 with arrays
我的作业任务是在 C# 中输出 0-10000 的所有素数,但我的解决方案必须使用数组
我的代码是:
public static void Main()
{
Int32[] numbers = new int[10000];
for (int i = 3; 1 < 10000; i++)
{
numbers[i] = i;
}
for (int j = 0; j < 10000; j++)
{
if (numbers[j] != 0)
{
for (int k = 2; (k * j) < 10000; k++)
{
numbers[k * j] = 0;
}
}
}
for (int y = 0; l < 10000; l++)
{
if (numbers[l] != 0)
{
Console.WriteLine(numbers[l]);
}
}
Console.ReadLine();
}
我一直收到错误消息:
main.cs(17,5): warning CS0162: Unreachable code detected
Compilation succeeded - 1 warning(s)
Unhandled Exception: System.IndexOutOfRangeException: Index was outside the bounds of the array.
at MainClass.Main () [0x00012] in <9e6bcdf6e2a44b4eb679270e1ffe39ca>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.IndexOutOfRangeException: Index
was outside the bounds of the array.
at MainClass.Main () [0x00012] in <9e6bcdf6e2a44b4eb679270e1ffe39ca>:0`
(第17行参考for (int j = 0; j < 10000; j++)
)
你需要修复你的 for
循环,所以结果是这样的:
for (int i = 2; i < 10000; i++)
{
numbers[i] = i;
}
for (int j = 0; j < 10000; j++)
{
if (numbers[j] != 0)
{
for (int k = 2; (k * j) < 10000; k++)
{
numbers[k * j] = 0;
}
}
}
for (int l = 0; l < 10000; l++)
{
if (numbers[l] != 0)
{
Console.WriteLine(numbers[l]);
}
}
否则,您的第一个循环将因验证而无限循环 1 < 10000
,而您的第三个循环将抛出错误
更新
阅读@"Sani Singh Huttunen" 评论后,我将第一个循环更改为以 2
开头,这样它将将该数字计为质数,这将从结果列表中删除 4
因为那不是质数。
Here 是一个工作示例
代码中的第一个循环:
for (int i = 3; 1 < 10000; i++)
本质上是一个无限循环,1会总是小于10000因此永远不会退出。此循环之后的所有内容现在都无法访问。
你得到你的错误是因为在 10,000 次循环之后你仍然会尝试这样做:
numbers[i] = i;
并且 i
将大于 9999,这将导致 IndexOutOfRangeException
解决此问题后,您会发现更多问题,但由于这是家庭作业,您需要尝试自己解决这些问题
我的作业任务是在 C# 中输出 0-10000 的所有素数,但我的解决方案必须使用数组
我的代码是:
public static void Main()
{
Int32[] numbers = new int[10000];
for (int i = 3; 1 < 10000; i++)
{
numbers[i] = i;
}
for (int j = 0; j < 10000; j++)
{
if (numbers[j] != 0)
{
for (int k = 2; (k * j) < 10000; k++)
{
numbers[k * j] = 0;
}
}
}
for (int y = 0; l < 10000; l++)
{
if (numbers[l] != 0)
{
Console.WriteLine(numbers[l]);
}
}
Console.ReadLine();
}
我一直收到错误消息:
main.cs(17,5): warning CS0162: Unreachable code detected Compilation succeeded - 1 warning(s)
Unhandled Exception: System.IndexOutOfRangeException: Index was outside the bounds of the array. at MainClass.Main () [0x00012] in <9e6bcdf6e2a44b4eb679270e1ffe39ca>:0 [ERROR] FATAL UNHANDLED EXCEPTION: System.IndexOutOfRangeException: Index was outside the bounds of the array. at MainClass.Main () [0x00012] in <9e6bcdf6e2a44b4eb679270e1ffe39ca>:0`
(第17行参考for (int j = 0; j < 10000; j++)
)
你需要修复你的 for
循环,所以结果是这样的:
for (int i = 2; i < 10000; i++)
{
numbers[i] = i;
}
for (int j = 0; j < 10000; j++)
{
if (numbers[j] != 0)
{
for (int k = 2; (k * j) < 10000; k++)
{
numbers[k * j] = 0;
}
}
}
for (int l = 0; l < 10000; l++)
{
if (numbers[l] != 0)
{
Console.WriteLine(numbers[l]);
}
}
否则,您的第一个循环将因验证而无限循环 1 < 10000
,而您的第三个循环将抛出错误
更新
阅读@"Sani Singh Huttunen" 评论后,我将第一个循环更改为以 2
开头,这样它将将该数字计为质数,这将从结果列表中删除 4
因为那不是质数。
Here 是一个工作示例
代码中的第一个循环:
for (int i = 3; 1 < 10000; i++)
本质上是一个无限循环,1会总是小于10000因此永远不会退出。此循环之后的所有内容现在都无法访问。
你得到你的错误是因为在 10,000 次循环之后你仍然会尝试这样做:
numbers[i] = i;
并且 i
将大于 9999,这将导致 IndexOutOfRangeException
解决此问题后,您会发现更多问题,但由于这是家庭作业,您需要尝试自己解决这些问题