C# 在Armstrong No.中为列表或数组赋值时遇到问题 类程序 { 静态void Main(字符串[]参数) { 内部温度; int-arm,j=0; List armstrongnos=新列表(); 对于(int i=1;i0) { arm+=(i%10)*(i%10)*(i%10); i/=10; } 如果(臂==温度) { armstrongnos.Add(temp);//无论使用数组还是列表,都会发生OutOfMemory异常。 } } foreach(armstrongnos中的var项目) { 控制台写入线(项目); } Console.ReadLine(); } }

C# 在Armstrong No.中为列表或数组赋值时遇到问题 类程序 { 静态void Main(字符串[]参数) { 内部温度; int-arm,j=0; List armstrongnos=新列表(); 对于(int i=1;i0) { arm+=(i%10)*(i%10)*(i%10); i/=10; } 如果(臂==温度) { armstrongnos.Add(temp);//无论使用数组还是列表,都会发生OutOfMemory异常。 } } foreach(armstrongnos中的var项目) { 控制台写入线(项目); } Console.ReadLine(); } },c#,C#,我正试着把阿姆斯特朗的编号从1号打印到1000号。在上面的代码中,确认它是armstrong编号后,我将这些值分配给数组或列表。但在这两种情况下,我都有outofMemory例外。 我不明白为什么会出现这个问题。 请帮助解决此问题。 在这个代码中我做错了什么。请解释。您正在运行一个无限循环。循环的停止条件为i0)时,但是i将始终大于0。无限运行时,代码最终会遇到OutOfMemory异常 如果您想使用变量值,决不使用循环的i迭代器-使用temp执行 class Program { sta

我正试着把阿姆斯特朗的编号从1号打印到1000号。在上面的代码中,确认它是armstrong编号后,我将这些值分配给数组或列表。但在这两种情况下,我都有outofMemory例外。 我不明白为什么会出现这个问题。 请帮助解决此问题。
在这个代码中我做错了什么。请解释。

您正在运行一个无限循环。循环的停止条件为
i<1000
, 但是
i
始终小于
1000
,因为您正在循环中对其进行减量,而
当(i>0)
时,但是
i
始终大于
0
。无限运行时,代码最终会遇到OutOfMemory异常

如果您想使用变量值,决不使用循环的
i
迭代器-使用
temp
执行

class Program
{
    static void Main(string[] args)
    {
        int temp;
        int arm, j = 0;
        List<int> armstrongnos = new List<int>();
        for (int i = 1; i < 1000; i++)
        {
            arm= 0;
            temp = i;
            while (i > 0)
            {
                arm += (i % 10) * (i % 10) * (i % 10);
                i /= 10;
            }
            if (arm== temp)
            {
                armstrongnos.Add(temp);// OutOfMemory Exception occurs whether you use array or list.
            }
        }
        foreach (var item in armstrongnos)
        {
            Console.WriteLine(item);
        }
        Console.ReadLine();
    }
}
for(int i=1;i<1000;i++)
{
arm=0;
温度=i;
而(温度>0)
{
arm+=(温度%10)*(温度%10)*(温度%10);
温度/=10;
}
if(arm==i)
ARMSTRONG编号添加(i);
}
foreach(armstrongnos中的var项目)
控制台写入线(项目);
Console.ReadLine();

问题在于您正在修改迭代变量

for (int i = 1; i < 1000; i++)
{
    arm = 0;
    temp = i;

    while(temp > 0)
    {
       arm += (temp % 10) * (temp % 10) * (temp % 10); 
       temp /= 10;
    }
    if (arm == i)
       armstrongnos.Add(i);
}
foreach (var item in armstrongnos)
    Console.WriteLine(item);

Console.ReadLine();

rev声明在哪里?rev来自哪里?我假设您使用的是Visual Studio。您是否尝试过使用内置调试器单步执行代码?对不起,这应该是arm。编辑文档时输入错误code@MongZhu在更正变量名(以及两个答案中提到的迭代器)后,结果是
1153371407
在不到一秒钟的时间内-在我看来是正确的:D.不是全部。崩溃发生在第一次迭代后,
armstrongnos.Add(temp)
总是被调用。@MongZhu:Oops,你是对的。很抱歉忘记了
for
循环中的
++i
。我欠你一杯酒。@Bathsheba下次我在伦敦时,我会接受你的提议;)@芭丝谢芭把我也算在内?“我想喝一杯。”蒙珠:太好了。如果你在城里,请告诉我。
for (int i = 1; i < 1000; i++)
{
    // ...
    while (i > 0)
    {
        // ...
        i /= 10;
    }
    // ...
}
temp = i;
while(temp > 0)
{
   arm += (temp % 10) * (temp % 10) * (temp % 10);
   temp /= 10;
}
if (arm == i)
{
    armstrongnos.Add(i);
}