Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-for循环以奇怪的间隔冻结_C#_For Loop_Random_Freeze - Fatal编程技术网

C#-for循环以奇怪的间隔冻结

C#-for循环以奇怪的间隔冻结,c#,for-loop,random,freeze,C#,For Loop,Random,Freeze,我正在进行Euler项目,我的代码似乎在无明显原因的情况下以随机间隔冻结 static void Main() { int maxNum = 0; int maxLength = 0; for (int x = 2; x < 1000000; ++x) { int num = x; int length = 0; while (num != 1) { if (num %

我正在进行Euler项目,我的代码似乎在无明显原因的情况下以随机间隔冻结

static void Main()
{
    int maxNum = 0;
    int maxLength = 0;
    for (int x = 2; x < 1000000; ++x)
    {
        int num = x;
        int length = 0;
        while (num != 1)
        {
            if (num % 2 == 0)
            {
                num /= 2;
                length++;
            }
            else
            {
                num = (3 * num) + 1;
                length++;
            }
       }
       if (length > maxLength)
       {
            maxLength = length;
            maxNum = x;
       }
    }
    Console.WriteLine(maxNum);
    Console.ReadLine();
static void Main()
{
int maxNum=0;
int maxLength=0;
对于(整数x=2;x<1000000;++x)
{
int num=x;
整数长度=0;
while(num!=1)
{
如果(数值%2==0)
{
num/=2;
长度++;
}
其他的
{
num=(3*num)+1;
长度++;
}
}
如果(长度>最大长度)
{
最大长度=长度;
maxNum=x;
}
}
Console.WriteLine(maxNum);
Console.ReadLine();

每次运行程序时挂起的数字都不一样,而且似乎没有遵循任何设置模式。您知道为什么它会这样挂起吗?提前谢谢。

如果在
中进入无限循环,而(num!=1)
如果在
中进入无限循环,而(num!=1)

如果在
中进入无限循环

我用另一种方法解决了这个问题,通过缓存每个步骤的结果,我发现了您的问题。我怀疑您的程序是否会停止。
语句
num=(3*num)+1
可能溢出
Int32.MaxValue
并导致负数和无限循环(?。

在这种情况下,您可以通过对x使用
long
来解决问题。

我用另一种方法解决了问题,通过缓存每个步骤的结果,我发现了您的问题。我怀疑您的程序是否会停止。
语句
num=(3*num)+1
可能溢出
Int32.MaxValue
并导致负数和无限循环(?。

在这种情况下,您可以通过为x使用
long
来解决问题。

我打赌这个版本不会冻结,没有理由这样做

在内部while循环中点击1之前的Collatz序列太短,不会导致明显的延迟,如果它们会延迟,那么应该总是在相同的数字上发生


如果您在循环中添加控制台输出,那么这可能会分配内存,您看到的暂停可能是由于垃圾收集造成的。

我打赌这个版本不会冻结,没有理由这样做

在内部while循环中点击1之前的Collatz序列太短,不会导致明显的延迟,如果它们会延迟,那么应该总是在相同的数字上发生


如果在循环中添加控制台输出,则这可能会分配内存,并且您看到的暂停可能是由于垃圾收集造成的。

“冻结”然后醒来,或者它是为了?冻结,就像在一个随机数处停止,一直呆在那里,直到我结束程序。用你的话来说,它是为了。你怎么知道它是冻结的?它冻结在哪一行?“冻结”意味着它正在点击控制台。ReadLine()等待你按下一个按钮吗?不,它仍然在for循环的中间。我在循环中的各个点设置了控制台。然后醒来,或者它是为了?冻结,就像在一个随机数处停止,一直呆在那里,直到我结束程序。用你的话来说,它是为了。你怎么知道它是冻结的?它冻结在哪一行?“冻结”意味着它正在点击控制台。ReadLine()等待你按下一个按钮吗?不,它仍然在for循环的中间。我设置了控制台。它在循环中的不同点,以确保它仍然在循环,有时它会停下来,在不同的数字下静止不动,没有反应。但这就是问题所在。我不认为它会进入无限循环,因为有时它会在某个数字上卡住,而有时它不会。但这就是问题所在。我不认为它会进入无限循环进入一个无限循环,因为有时它会被固定在某个数字上,而有时不会。是的,这似乎是个问题。我将int改为long,现在效果很好。谢谢!没问题,这是一个有趣的谜题。如果你感兴趣,这是我的解决方案:是的,这似乎是个问题。我将int改为long,现在效果很好。谢谢!没问题,这是一个有趣的谜题。如果你感兴趣的话,这是我的解决方案:在这种情况下,问题是整数溢出,这在问题的范围内肯定会发生。当我用C和C重新编写我的解决方案时,我也有点犹豫。是的,我忘记了。32位整数溢出有很多循环,例如113383。尽管我在这种情况下,它应该始终挂起在这个数字上。在这种情况下,问题是整数溢出,这在该问题的范围内肯定会发生。当我用C和C重新编写解决方案时,我也有点犹豫。是的,我忘记了。对于32位整数溢出,有许多循环,例如113383。虽然在这种情况下,它应该是在这个数字上,路是悬而未决的。