继续打印一个数字,直到该数字在 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();

    }

}


繁花不似锦
浏览 171回答 3
3回答

喵喔喔

你的错误在这里:            if(number % 2 != 0) {                 number = (3* number) + 1;                 out.printf("%d \n",number);                        if(number == 1){在检查它是否为 1 之前,您将数字从 1 变成偶数(通过乘以 3 并加 1)。偶数不会是 1。要修复它,请在更改之前检查是否number为 1 。number

胡说叔叔

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

12345678_0001

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();    }    }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java