我有一个字符串数组,当用户点击我的应用程序中的按钮时,我会生成一个随机数,并使用它从我的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];
}
答案 0 :(得分:0)
在getFacts()的开头,添加:
isNotNewRandomNumber = true;
问题是,当你第一次调用getFacts()时,你将NotNotNewRandomNumber设置为false,然后你再也没有将它设置为true,所以你永远不会再次进入while循环。
我不确定你需要做什么。可能还有其他错误。似乎没有必要在while循环中使用for循环。肯定有更好的办法。您可能希望在return语句之前将factsCheck [x]设置为某个适当的值。