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

继续打印一个数字,直到Java中的数字等于1,java,Java,我有一个代码,它生成一个随机数,并打印一个以这个随机数开始的数字序列。我希望序列在数字等于1时结束 这是我尝试过的,但似乎不起作用 package Collatz; import java.io.PrintStream; import java.util.Random; class Collatz { PrintStream out; Collatz() { out = new PrintStream(System.out); } v

我有一个代码,它生成一个随机数,并打印一个以这个随机数开始的数字序列。我希望序列在数字等于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(数字%2!=0){
数字=(3*数字)+1;
out.printf(“%d\n”,数字);
如果(数字==1){
在检查是否为1之前,将数字从1变为偶数(通过乘以3再加1)。偶数不会是1

要修复它,请在更改
编号之前检查
编号是否为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”,则不会执行循环。最后打印数字,即“1”。干杯!

什么不起作用?它会保留在已经到达数字1后打印数字。逻辑错误,当数字为0时,它会在第一个“如果”中输入,但不会在第二个“如果”中输入。因为数字应该为0(零)到数字为1…但是0%2是0请添加一些关于您更改了什么以及更改原因的解释。
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);
}