当迭代数组时,c#中的索引超出范围异常
本文关键字:索引 范围 异常 数组 迭代 | 更新日期: 2023-09-27 18:17:33
我有这段代码,我使用它来创建一个程序,该程序接受一个范围并向控制台输出素数。我有一个问题,我试图通过我构建的数组迭代,所以循环应该只写到控制台的值是使用我的方法的返回值。我遇到的问题是,我有第二个条件设置为numArray.Length
,但它似乎给了我Index out of Range Exception
。我只想让循环遍历numArray
中的所有值,并在确定最后一个值是否为素数时停止。
public struct Prime
{
public int x;
// constructor for Prime
public Prime(int x1)
{
x = x1;
}
public int IsPrime(int number)
{
int i;
for (i = 2; i * i <= number; i++)
{
if (number % i == 0) return 0;
}
return 1;
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Enter an Integer");
int num1 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Enter a Second Integer of Greater Value");
// int num2 = 0;
int num2 = Convert.ToInt32(Console.ReadLine());
/* if (num2temp > num1)
{
num2temp = num2;
}
else
{
Console.WriteLine("You Did Not Enter An Integer Greater Than the First Integer, Please Enter Your Integers Again.");
Environment.Exit(0);
}
*/ int index = 1;
int[] numArray = new int[num2];
for (int i = num1; i <= num2; i++)
{
numArray[index] = i;
Console.WriteLine(" index: {0} assignment: {1}", index, i);
index++;
Console.WriteLine("index: {0}",index);
}
Console.WriteLine("value: {0}", numArray[40]);
/* Prime myprime = new Prime();
if (myprime.IsPrime(numArray[12]) == 1)
{
Console.WriteLine("true");
}
else
{
Console.WriteLine("False");
} */
Prime myprime = new Prime();
int value = 0;
for (int y = 1; y <= num2; y++)
{
if (myprime.IsPrime(numArray[y]) == 1)
{
value = numArray[y];
Console.Write("{0} 't", value);
}
}
您当前正在尝试迭代到并包括数组的大小。数组在c#中是0索引的。所以这:
int[] numArray = new int[num2];
for (int i = num1; i <= num2; i++)
应:for (int i = num1; i < num2; i++)
注意,要获得第一个元素数组,num1
必须是0,而不是1。
同样,index
作为1
的初始赋值应该改为0
。基本上,你需要检查你所有的代码(现在有很多位被注释掉了),并检查你假设数组是基于1的,而不是改变你的代码,因为它们是基于0的。
(当然,在某些情况下,您可能只是想使数组更大。如果你想要一个逻辑上包含值1到x的数组,你可以创建一个大小为x的数组并从每个索引中减去1,或者创建一个大小为x + 1的数组
您的索引从1开始,但应该从0开始:
int index = 0; //CHANGE HERE
int[] numArray = new int[num2];
for (int i = num1; i <= num2; i++)
{
numArray[index] = i;
Console.WriteLine(" index: {0} assignment: {1}", index, i);
index++;
Console.WriteLine("index: {0}",index);
}
然后这里y也应该是0检查它是否小于num2:
for (int y = 0; y < num2; y++)
{
if (myprime.IsPrime(numArray[y]) == 1)
{
value = numArray[y];
Console.Write("{0} 't", value);
}
}
因为c#中的数组索引从0开始