为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁花不似锦 2021-10-13 13:32:22
我有一个代码,它生成一个随机数并打印一个以这个随机数开头的数字序列。我希望序列在数字等于 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();    }}
查看完整描述

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


查看完整回答
反对 回复 2021-10-13
?
胡说叔叔

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


查看完整回答
反对 回复 2021-10-13
?
12345678_0001

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

    }

    }


查看完整回答
反对 回复 2021-10-13
  • 3 回答
  • 0 关注
  • 170 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信