【问题标题】:How to fix while loop stopping + unhandled exception error如何修复循环停止+未处理的异常错误
【发布时间】:2019-01-08 01:39:12
【问题描述】:

While 循环遍历 if 语句一次并停止。

我是 C# 新手,如果我忽略了一些看似显而易见的事情,请原谅。我目前正在编写一个程序,通过控制台条目可视化 Collat​​z 猜想。该程序首先提示用户输入一个自然数。该程序应该通过猜想的公式运行该数字,直到它最终达到值 1。但是,当我在控制台中输入数字时,程序通过一个公式运行它并崩溃。似乎 Double.Parse 行有问题。我已经尝试使用转换方法并尝试将“num”定义为十进制而不是双精度。

    {
        Console.WriteLine("Enter a natural number:");

        Double num = Convert.ToDouble(Console.ReadLine());

        while (num != 1)
        {
            {
                if (num % 2 == 0)
                {
                    Console.WriteLine(num / 2);
                    num = Double.Parse(Console.ReadLine());
                }
                else
                {
                    Console.WriteLine(num * 3 + 1);
                    num = Double.Parse(Console.ReadLine());
                }
            }


            Console.ReadLine();
        }
    }
}
}

【问题讨论】:

  • 程序崩溃时看到什么错误?您是否首次发布了代码?什么代码被执行,哪一行导致崩溃?为什么需要num = Double.Parse(Console.ReadLine()); while 循环?
  • 您是否打算调用 ReadLine 读取您刚刚写出的数字?
  • Console.ReadLine() 从用户那里获得输入。您的程序没有崩溃,它正在等待您输入内容然后按Enter。最有可能的是,您希望对 num 执行操作,而不是从用户那里获得更多输入,例如 num = num / 2;num = num * 3 + 1;
  • 谢谢大家的帮助。问题是Console.ReadLine() 在第一次运行 while 循环后记录了一个空白条目。我删除了 Console.ReadLine() 并用 manic_coder 的建议替换它。

标签: c#


【解决方案1】:

老实说,我并不肯定你试图从描述中实现什么(即,我不知道 Collat​​z 猜想可视化公式是什么),但我想我知道你的问题是什么。

我认为您对 Console.ReadLine() 有点困惑。此方法暂停并等待用户输入。因此,在第一次循环 while 语句期间,您的程序将暂停并等待用户输入。我认为您要做的是在“if”或“else”部分中获取公式的结果,并将其捕获为“num”的新值。

这是我对您要达到的目标的最佳猜测:

static void Main(string[] args)
    {
        Console.WriteLine("Enter a natural number:");

        Double num = Convert.ToDouble(Console.ReadLine());

        while (num != 1)
        {
            if (num % 2 == 0)
            {
                num /= 2;
                Console.WriteLine(num);
            }
            else
            {
                num = num * 3 + 1;
                Console.WriteLine(num);
            }
        }

        Console.WriteLine(num);

        Console.ReadLine();
    }

此外,您的 while 语句中似乎可能有一组额外的括号。这似乎不会按原样编译,所以也许这只是您将其复制到问题中的方式。

【讨论】:

  • 科拉茨猜想是数学中的一个猜想,如果你取任何正数,然后将其除以 2(如果是偶数)或在数字和 3 的乘积上加一,你将最终得到一个。该程序旨在引导用户完成每个步骤。 IE。 5、16、8、4、2、1
猜你喜欢
  • 2021-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-06
  • 1970-01-01
  • 2012-12-09
  • 1970-01-01
相关资源
最近更新 更多