循环运行一次if语句并停止。
我是C#的新手,如果我忽略了看似明显的内容,请原谅。我目前正在编写一个通过控制台条目可视化Collatz猜想的程序。该程序首先提示用户输入自然数。该程序应该通过猜想的公式运行该数字,直到最终达到数值1。但是,当我在控制台中键入该数字时,程序将通过一个公式运行它并崩溃。似乎Double.Parse行有问题。我已经尝试使用convert方法,并尝试将“ 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();
}
}
}
}
答案 0 :(得分:3)
说实话,我不能肯定您要从描述中实现的目标(即,我不知道什么是Collatz猜想可视化公式),但我想我知道您的问题是什么。< / p>
我认为您对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语句中可能还有一组括号。似乎并不能按原样编译,所以也许这只是将其复制到问题中的方式。