3 回答
TA贡献1735条经验 获得超5个赞
你的错误在这里:
if(number % 2 != 0) { number = (3* number) + 1; out.printf("%d \n",number); if(number == 1){
在检查它是否为 1 之前,您将数字从 1 变成偶数(通过乘以 3 并加 1)。偶数不会是 1。
要修复它,请在更改之前检查是否number
为 1 。number
TA贡献1804条经验 获得超8个赞
void start() {
int number = 0;
Random random = new Random();
int rand = random.nextInt(100);
number = rand;
while(number!=1) {
if(number % 2 == 0) {
number = number / 2;
out.printf("%d \n",number);
}
if(number % 2 != 0) {
number = (3* number) + 1;
out.printf("%d \n",number);
}
}
out.printf("%d \n",number);
}
在检查号码是否为“1”之前,您正在更新号码,这可能会给您带来该问题。而不是打破'for'循环,只需将循环更改为while,它将检查数字是否为'1'。如果是,则不会执行循环。最后打印数字,即“1”。干杯!
TA贡献1802条经验 获得超5个赞
package Collatz;
import java.io.PrintStream;
import java.util.Random;
class Collatz {
PrintStream out;
Collatz() {
out = new PrintStream(System.out);
}
void start() {
int number = 0;
Random random = new Random();
int rand = random.nextInt(100);
number = rand;
for(;;) {
if(number % 2 == 0) {
number = number / 2;
out.printf("%d \n",number);
}
if(number == 1){
out.printf("%d \n",number);
break;
}
if(number % 2 != 0) {
number = (3* number) + 1;
out.printf("%d \n",number);
}
}
}
public static void main(String[] argv) {
new Collatz().start();
}
}
添加回答
举报