0

編集:助けてくれてありがとう、私は私の間違いが数字=(40 / i)であるはずだったのに数字=(40 / 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、無期限にループします。

2番目のループでは、リセットi = 1してからループします。したがって、の場合number % 2 == 0、メモリが不足するまでリストにアイテムを追加し続けます。

于 2012-12-28T23:15:01.190 に答える
0

2番目のforループが無限であるため、このエラーが発生します。そのため、リストに追加し続け、ある時点で、それを保持するのに十分なメモリがありません。i = 1であるため、ループは無限です。声明。

また、最初のループに別の問題があることに注意してください。forステートメントの最後にi++ステートメントがありません。

于 2012-12-28T23:16:24.713 に答える