我的迭代方法的逻辑缺陷是什么?

时间:2019-08-13 02:12:28

标签: java iteration logic

首次调用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之间的任何值。显然有一个逻辑错误,但我看不到。

1 个答案:

答案 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。