您好,我对编码非常陌生,并且正在与一名老师一起上入门Java课,希望您已经了解所有知识。我必须编码冰雹序列,表示为:
选择一些正整数并将其称为n。 如果n为偶数,则将其除以2。 如果n为奇数,则将其乘以3并加1。 继续此过程,直到n等于1。
我们还没有学习过递归或数组,他说我们不需要在此代码中使用它,尽管我不太清楚这意味着什么。我们将展示使用序列公式得出一个的步骤。
这就是我所拥有的,我遇到以下问题:
请帮助我识别出我要去的地方并提供解释。我很绝望。
import javax.swing.JOptionPane;
public class Hailstone {
public static void main(String[] args) {
String output = "";
int n;
n = Integer.parseInt(JOptionPane.showInputDialog("\nEnter an Integer"));
while (n != 1) {
int result = 0;
if (n%2 == 0) {
result = n /= 2;
output += n + " is even so I took half = " + result;
JOptionPane.showMessageDialog(null, output);
}else{
result = n*3 + 1;
output += n + " is odd so I took 3n+1 = " + result;
JOptionPane.showMessageDialog(null, output);
}
}
}
}
答案 0 :(得分:2)
此语句:result = n /= 2;
并没有您认为的那样。它将n
除以2,将结果存储在n
中,然后还将结果存储在result
中。但是,这不是代码的主要问题。
问题是您缺少一件非常简单的小事情:在循环中更新n
。没有这个,n
将永远不会改变。 (除了我上面提到的意外修改。)
因此,(解决了上述问题之后),您需要做的就是以下事情:
在循环结束之前,添加以下行:
n = result;