索引越界错误 c#
本文关键字:错误 越界 索引 | 更新日期: 2023-09-27 18:30:21
使用我的数字返回因子函数,我得到了一个不应该的错误。
这是我的代码:
static void Main(string[] args)
{
foreach (int element in Factors(16))
{
Console.Write(element.ToString() + ", ");
}
}
static Array Factors(double value)
{
int[] factors = new int[] { };
int counter = 0;
for (int i = 1; i <= value; i++)
{
if (value % i == 0)
{
factors[counter] = i;
counter++;
}
}
return factors;
}
这是我收到的错误:
TestSolver 中发生了类型为"System.IndexOutOfRangeException"的未处理异常.exe
其他信息:索引超出数组边界。
您正在初始化一个空数组,但随后尝试将值分配给不存在的索引。对于此应用程序,您可能最好使用List<int>
。
var factors = new List<int>();
for (int i = 1; i <= (0.5 * value); i++)
if (value % i == 0)
factors.Add(i);
return factors.ToArray(); // returns int[]
行
int[] factors = new int[] { };
创建一个包含 0 个元素的数组。.NET 中的数组是固定大小的,因此稍后当您尝试使用 factors[counter] = i;
访问元素时,它会失败,因为尚未分配任何元素。
您需要在分配factors
时指定元素的数量(类似于 int[] factors = new int[16];
),或者使用 List<int>
这是一个动态数组(您可以使用 Add()
在末尾添加新元素)。
如果您真的不想更改太多代码,可以采取的另一种途径是为数组分配初始大小(例如,它可以具有的最大数量),然后调整大小。
static void Main(string[] args)
{
foreach (int element in Factors(16))
{
Console.Write(element.ToString() + ", ");
}
}
static Array Factors(double value)
{
int[] factors = new int[Convert.ToInt32(Math.Round(value,0))];
int counter = 0;
for (int i = 1; i <= value; i++)
{
if (value % i == 0)
{
factors[counter] = i;
counter++;
}
}
Array.Resize(ref factors, counter);
return factors;
}
int[] factors = new int[] { };
正在创建一个没有元素的数组(零大小)。当您执行以下操作时,它不会神奇地扩展:
factors[0] = 42;
要调整数组大小,您可以使用Array.Resize(ref arrName, newSize)
或选择可以调整大小的集合,例如 List<int>
。
您尚未设置数组的大小,这会导致错误。作为解决方法,您可以做的是将其放在列表中并迭代要传递的参数。你可以试试这样的事情。
static Array Factors(double value)
{
List<int> factors = new List<int>();
for (int i = 1; i <= value; i++)
{
if (value % i == 0)
factors.Add(i);
}
return factors.ToArray();
}
问题是这一行:
int[] factors = new int[] { };
您正在创建一个名为 factors
的新整数数组,但未指定此数组必须包含的元素数。以这种方式初始化数组时,必须声明数组的长度。因此,当您编写...
factors[counter] = i;
。引发异常,因为数组长度为 0。它不能包含任何元素。 factors[0] = i
不是有效的分配,因为factors[0]
不存在。
您可以轻松地使用 List<int>
而不是数组来完成此操作。可以根据需要将元素添加到列表中。完成列表后,您可以使用 ToArray
将其转换为数组。因此,您可以按如下方式修改Factors
:
static Array Factors(double value)
{
List<int> factors = new List<int>();
for (int i = 1; i <= (0.5 * value); i++)
{
if (value % 1 == 0)
{
factors.Add(i);
}
}
return factors.ToArray();
}
请注意,不再需要counter
。