【问题标题】:Random Number Occurrence Check随机数出现检查
【发布时间】:2018-04-16 03:33:57
【问题描述】:

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

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

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];
}

【问题讨论】:

  • 就像一般注释和设计改进一样,对于没有您想要的重复的随机逻辑,保存选项列表通常更好更容易,选择一个随机选项并 删除 从列表中选择它,因此不能再次选择它,并且列表每次都会变小。 :)
  • 你也可以看看 java.util.Collections.shuffle() 方法。

标签: java android arrays random


【解决方案1】:

在 getFacts() 的开头,添加:

isNotNewRandomNumber = true;

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

我不确定这就是您需要做的全部。也可能有其他错误。在 while 循环中似乎没有必要有一个 for 循环。一定会有更好的办法。您可能希望在 return 语句之前将 factCheck[x] 设置为某个适当的值。

【讨论】:

    猜你喜欢
    • 2013-03-17
    • 2019-12-02
    • 1970-01-01
    • 2019-10-04
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    相关资源
    最近更新 更多