【发布时间】:2012-08-29 13:03:47
【问题描述】:
我做了一个程序来执行(通常称为)冰雹序列,该程序基本上是这样做的:
创建一个int(值)并为其分配一个值。
如果 int 是偶数,则除以二。
如果 int 是奇数,则将其乘以 3 并加 1。继续这个过程,直到 n 等于 1。
似乎大多数数字都可以正常工作,但是这个数字 99888769,应用程序挂在一个负整数上。为什么会这样?,他们说没有人能够证明它停止了,我没想到我已经解决了这个问题。但是知道为什么我的应用程序停止会很有趣。 -
private void hailStoneSequence(){
int value = 99888769;
int i = 0;
boolean trueOrFalse = isOddOrEven (value);
while (value != 1){
while (trueOrFalse == true && value != 1){
i++;
int previousValue = value;
value = value / 2;
println( previousValue +" is even, so I take half: "+value);
trueOrFalse = isOddOrEven (value); // returning true or false, and inserting the newly divided number. So that it breaks loop when nescesary.
}
while (trueOrFalse == false && value != 1){
i++;
int previousValue = value;
value = (value * 3) + 1;
println (previousValue +" is odd, so I make 3n+1: "+value);
trueOrFalse = isOddOrEven (value);
}
}
println ("\n\nThe process took "+i+" to reach "+value);
}
private boolean isOddOrEven(int value){
/*
* Takes an value and returns true, if that number is even.
* Else it returns false.
*/
if (value % 2 != 0){
return false;
}else{
return true;
}
}
}
【问题讨论】:
-
作为一个小提示:你的
isOddOrEven()方法和trueOrFalse变量有奇怪的名字。将布尔函数和布尔变量命名为断言肯定形式的短语要好得多。例如,如果您的变量名为isOdd,那么当值为奇数时,isOdd将是true,如果值为偶数,isOdd将是false。这使得阅读代码变得更加容易。 -
注意...我明白你的意思,它们不是很可读。
标签: java math integer sequence