继续打印一个数字,直到 Java 中的数字等于 1



>我有一个代码,它生成一个随机数并打印一个以这个随机数开头的数字序列。我希望序列在数字等于 1 时结束。

这是我尝试过的,但它似乎不起作用。

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 % 2 != 0) {
number = (3* number) + 1;
out.printf("%d n",number);
if(number == 1){
out.printf("%d n",number);
break;
}
}
}
}
public static void main(String[] argv) {
new Collatz().start();
}
}

你的错误在这里:

if(number % 2 != 0) {
number = (3* number) + 1;
out.printf("%d n",number);
if(number == 1){

将数字从 1 转换为偶数(通过乘以 3 并加 1(,然后再检查它是否为 1。偶数不会是 1。

要修复它,请在更改number之前检查number是否为 1。

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"。干杯!

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();
}
}

最新更新