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