0

编辑:感谢各位的帮助,我刚刚意识到我的错误是把 number = (40 / i) 放在了应该是 number = (number / i) 的地方......由于某种原因,我脑子里有数字 40。

第一个循环中缺少的“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;
        }
4

2 回答 2

3

在第一个循环中,您没有迭代i,因此除非number % 2 == 0,它将无限循环。

在第二个循环中,您正在重置i = 1然后循环。因此,如果number % 2 == 0,它将继续将项目添加到列表中,直到您耗尽内存为止。

于 2012-12-28T23:15:01.190 回答
0

您收到该错误是因为您的第二个 for 循环是无止境的,因此您不断添加到您的 List 并且在某个时刻您没有足够的内存来保存它。由于 i = 1; 循环是无限的。陈述。

另请注意,您在第一个循环中还有另一个问题,您在 for 语句的末尾缺少 i++ 语句。

于 2012-12-28T23:16:24.713 回答