【发布时间】: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