我能够在大约 5 分钟内使用 Java 解决 Collatz 猜想算法(不,我没有试图证明它)。
现在我正在学习 C# 来制作 Web 应用程序,但我在做同样的事情时遇到了麻烦。我只是想让用户输入一个数字,单击一个按钮,然后将输出打印到一个文本框中。
Click
这是我正在使用的按钮事件处理程序方法:
protected void Button3_Click(object sender, EventArgs e)
{
string x = TextBox1.Text; //user entered a number
string y =collatz(x); //this function is below and returns a string
chatbox.Text = y; //output
}
这是 Collatz 方法:
public static string collatz(string y)
{
if (y == null)
return null;
double x = double.Parse(y); //x is my "n"
y = x.ToString(); //output string
double large = x; //keep track of biggest number
// the algorithm
// the redundancies (like x==1.. x!= 1) are part of troubleshooting :/
while (x > 1)
{
if (x % 2 == 0)
{
x = x / 2;
if (x > large)
large = x;
if (x != 1)
y = y+" "+ x.ToString();
if (x == 1)
{
y = y + " " + x.ToString();
y = y + " largest number was " + large;
}
}
if (x % 2 != 0)
{
if (x == 1)
{
y = y+" "+ x.ToString();
y = y + " largest number was " + large;
}
x = (3 * x) + 1;
if (x > large)
large = x;
y = y+" "+ x.ToString();
}
}
return y;
}
编辑 当我使用 VS.net 调试器并输入像 2 这样的数字时,我得到 NO 输出和 NO 错误。我只能永远等待。如果它是一个无限循环,我最终会得到一个错误,对吧?
不,这不是一个家庭作业问题(虽然是 2 年前我在 JAVA 中做的 :)。)我正在独立学习 C#。