gpt4 book ai didi

java - 是什么导致 Java(冰雹序列)在我的程序中崩溃

转载 作者:搜寻专家 更新时间:2023-11-01 04:04:41 25 4
gpt4 key购买 nike

我制作了一个执行(通常称为)冰雹序列的程序,该程序基本上是这样做的:

创建一个 int(值)并为其分配一个值。

如果 int 是偶数,则将其除以二。

如果整数是奇数,乘以三再加一。继续这个过程直到 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;
}
}

最佳答案

当您不断增加 int 时,它们最终(以一种看似令人吃惊的行为)变为负值,因为您超过了 int 类型的最大值 (2^31-1) ,即您最终更改了用于存储数字符号的位(int 的二进制表示)。请改用 long

关于java - 是什么导致 Java(冰雹序列)在我的程序中崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12270788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com