第一个循环中缺少的“i ++”是我在尝试修复代码时意外删除它:P
原件:
我创建了一个方法,以整数列表的形式返回素数的素因子。但是,当我尝试用元素填充我的列表时,我收到一个错误。为什么呢?
static List<int> PrimeFactors(int number)
{
bool prime = false;
List<int> primeFactors = new List<int>();
for (int i = 2; i < number; )
{
if (number % i == 0)
{
prime = true;
break;
}
}
if (prime)
{
for (int i = 2; i < number; i++)
{
if (number % i == 0)
{
primeFactors.Add(i); // <--- Error at this line.
number = (40 / i);
i = 1;
}
}
primeFactors.Add(number);
}
return primeFactors;
}
答案 0 :(得分:3)
在第一个循环中,您没有迭代i
,所以除非number % 2 == 0
,否则它将无限循环。
在第二个循环中,您正在重置i = 1
然后循环。因此,如果number % 2 == 0
,它将继续向列表中添加项目,直到内存不足为止。
答案 1 :(得分:0)
你得到了这个错误,因为你的第二个for循环是无穷无尽的,所以你不断添加到你的List中,并且在某个时刻你没有足够的内存来保存它。 由于i = 1,循环是无止境的;言。
另请注意,在第一个循环中有另一个问题,您在for语句末尾缺少i ++语句。