随机数发生检查

时间:2017-11-03 11:51:51

标签: java android arrays random

我有一个字符串数组,当用户点击我的应用程序中的按钮时,我会生成一个随机数,并使用它从我的facts []数组中选择一个随机字符串。但是,我尝试改进我的代码,以便相同的随机数将永远不会#34;发生(导致向用户显示相同的字符串)。尽管我的努力,我的"检查"块似乎不起作用,因为当我第一次单击按钮然后它什么都不做时它会产生随机事实。请帮我弄清楚这背后的正确逻辑,并写出更有效的代码块。

我当前的逻辑:检查我的int [] factsCheck数组中是否已经存在已生成的随机数,如果它确实创建了另一个。如果它没有将它添加到数组中,那么程序就知道了它已经创建过一次。

int[] factsCheck = new int[facts.length];
boolean isNotNewRandomNumber = true;
int count = 0;
int randomNumberToReturn;

private void initFactsCheck() {
    for(int i=0; i<=factsCheck.length;i++) {
        factsCheck[i] = -1;
    }
}

String getFact() {
    // Randomly select a fact
    Random randomGenerator = new Random();
    while(isNotNewRandomNumber) {
         randomNumberToReturn = randomGenerator.nextInt(facts.length);
        for(int i = 0; i<factsCheck.length; i++) {
            if(factsCheck[i] == randomNumberToReturn) {
                break;
            } else {
                count++;
            }
        }
        if (count == factsCheck.length) {
            // Doesn't exist
            isNotNewRandomNumber = false;
        }
        count = 0;
    }
    return facts[randomNumberToReturn];
}

1 个答案:

答案 0 :(得分:0)

在getFacts()的开头,添加:

isNotNewRandomNumber = true;

问题是,当你第一次调用getFacts()时,你将NotNotNewRandomNumber设置为false,然后你再也没有将它设置为true,所以你永远不会再次进入while循环。

我不确定你需要做什么。可能还有其他错误。似乎没有必要在while循环中使用for循环。肯定有更好的办法。您可能希望在return语句之前将factsCheck [x]设置为某个适当的值。