首次调用iterate()时,我将在1-1024之间生成一个随机数,然后检查该随机数是否等于1。如果是,则完成= true,返回值应为10。不是,则应将x的值减1(x现在= 9)。然后,我希望在iterate()中再次调用getRandNum(),这一次将生成一个介于1-512之间的随机数,并检查它是否等于1,以此类推...直到x的返回值只能等于1
import java.util.Random;
public class Main {
static boolean done = false;
public static int rand(int x) {
Random rand = new Random();
return rand.nextInt(x) + 1;
}
public static int value(int x) {
return (int) Math.pow(2, x);
}
public static int getRandNum(int x) {
return rand(value(x));
}
public static int iterate() {
int x = 10;
do {
if (getRandNum(x) == 1) {
done = true;
}
else {
if (x > 1) {
x--;
}
else {
x = 1;
done = true;
}
}
} while (done = false);
return x;
}
public static void main(String[] args) {
System.out.println(iterate());
}
}
现在iterate()仅返回9。我需要它返回1-10之间的任何值。显然有一个逻辑错误,但我看不到。
答案 0 :(得分:1)
小错误:您做了while(done = false)
。这将done
分配给false
。正确的方法是while(!done)
。
public static int iterate() {
int x = 10;
do {
if (getRandNum(x) == 1) {
done = true;
}
else {
if (x > 1) {
x--;
}
else {
x = 1;
done = true;
}
}
} while (!done);
return x;
}
如果执行此操作,则会打印1。