我有一个家庭作业任务输出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):警告CS0162:检测到无法访问的代码编译成功 - 1个警告
未处理的异常:System.IndexOutOfRangeException:索引超出了数组的范围。 at MainClass.Main()[0x00012] in <9e6bcdf6e2a44b4eb679270e1ffe39ca>:0 [ERROR]致命未处理的异常:System.IndexOutOfRangeException:索引超出了数组的范围。在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
并且你的第三个循环将抛出错误
UPDATE
在阅读@“Sani Singh Huttunen”评论后,我将第一个循环更改为以2
开头,因此它会将该数字计为素数,这将从结果列表中删除4
,因为那不是素数。
Here是一个有效的例子
代码中的第一个循环:
for (int i = 3; 1 < 10000; i++)
本质上是一个无限循环,1总是小于10,000,因此永远不会退出。此循环后的所有内容现在都无法访问。
你得到错误,因为在10,000次循环后你仍然会尝试这样做:
numbers[i] = i;
i
将大于9999,这将导致IndexOutOfRangeException
修复此问题后,您会发现自己有更多问题,但由于这是作业,因此您需要尝试自行修复