我正在做一个猜谜游戏,你应该猜x国的首都,用户应该是提示,如果他们想再猜一次有一个数组的15个国家的卡,我需要通过随机顺序阅读,我也不能使用同一张卡两次。当我运行我当前的代码时,我完成了数组的14次迭代,最后一次只是停留在while循环的最开始(在将1输入yesno之后什么都没有发生)这里是相关的代码,任何帮助都是非常感谢的:
while (CountryCard.instances < 30) {
System.out.println("Would you like to guess the capital of a country?"
+ " Hit 1 for yes, or 2 for no (Case sensitive)");
yesNo = input.nextInt();
if (yesNo == 2) {
return;
}
Random generator = new Random();
int randomNumber = generator.nextInt(game.length);
while (game[randomNumber].used == true && CountryCard.uses < 15) {
randomNumber = generator.nextInt(game.length);
}
System.out.println("What is the Capital of "
+ game[randomNumber].getName() + "?");
game[randomNumber].usedCard(1);
guess = input.next();
if (guess.equals(game[randomNumber].getCapital())) {
System.out.println("Correct! :)");
} else {
System.out.println("Incorrect! :(");
}
}//end of while
System.out.println("Thanks for playing :)");
4条答案
按热度按时间9w11ddsr1#
为什么不把你的countrycard列表和collections一起洗牌呢?
比如:
wsewodh22#
我之前在一篇评论中提到,因为在查找最后1/15个数字时,在while循环中随机生成数字,所以很难做到这一点。您可以实现开放寻址冲突处理。其中,可以使用线性探测或双哈希。
线性探测:如果随机生成的数字是x,则x已经被使用,而不是生成新的随机数字,取x+1。如果使用x+1,则取x+2,依此类推。
双重散列:如果不使用随机生成的数字x,则继续正常操作,但如果使用,则使用散列将变量常量值添加到x中。
w9apscun3#
如果它只工作14次,那么问题将处于循环状态。
尝试改变
CountryCard.uses<15
至CountryCard.uses<=15
同时检查game.length的值wqlqzqxt4#
如果你的集合/数组只有15个元素,你可以直接使用
Collections.shuffle()
然后迭代。如果不想更改初始数组,可以使用索引(从零到array.length)生成集合,然后将其无序排列。