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

时间:2018-09-26 14:14:56

标签: java

我有一个代码,该代码生成一个随机数并打印以该随机数开头的数字序列。我希望序列在数字等于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 个答案:

答案 0 :(得分:1)

您的错误在这里:

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

在检查数字是否为1之前,可以将数字从1转换为偶数(乘以3并加1)。偶数不是1。

要解决此问题,请在更改number之前检查number是否为1。。

答案 1 :(得分: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);
}

您正在更新数字,然后检查数字是否为“ 1”,这可能会给您带来问题。无需从“ for”循环中断开,只需将循环更改为一会儿即可检查数字是否为“ 1”。如果是这样,则不会执行循环。最后打印数字,即“ 1”。干杯!

答案 2 :(得分:-2)

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