继续打印一个数字,直到Java中的数字等于1
我有一个代码,它生成一个随机数,并打印一个以这个随机数开始的数字序列。我希望序列在数字等于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
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);
}