Javascript 如何将52个随机生成的数字打印到控制台?
简单的代码,在一个纸牌游戏中工作,但是我在一开始就遇到了这个错误。我试图生成52个随机数,并打印出与之关联的适当数组元素。这是我的密码:Javascript 如何将52个随机生成的数字打印到控制台?,javascript,html,css,Javascript,Html,Css,简单的代码,在一个纸牌游戏中工作,但是我在一开始就遇到了这个错误。我试图生成52个随机数,并打印出与之关联的适当数组元素。这是我的密码: <!DOCTYPE html> <html> <head> </head> <body> <button onclick="shuffleCards()">Shuffle Cards</button> &
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<button onclick="shuffleCards()">Shuffle Cards</button>
<script>
function shuffleCards() {
var cardDeck = ["1S", "1C", "1H", "1D", "2S", "2C", "2H", "2D", "3S", "3C", "3H", "3D", "4S", "4C", "4H", "4D", "5S", "5C", "5H", "5D", "6S", "6C", "6H", "6D", "7S", "7C", "7H", "7D", "8S", "8C", "8H", "8D", "9S", "9C", "9H", "9D", "10S", "10C", "10H", "10D", "11S", "11C", "11H", "11D", "12S", "12C", "12H", "12D", "13S", "13C", "13H", "13D", ];
var handUser = [];
var handCPU = [];
var shuffledDeck = [];
for (var i = 51; i < 1; i--) {
var randomNumber = Math.floor(Math.random()*(i + 1));
console.log(cardDeck[randomNumber]);
}
}
</script>
</body>
</html>
洗牌
函数shuffleCards(){
var cardDeck=[“1S”、“1C”、“1H”、“1D”、“2S”、“2C”、“2H”、“2D”、“3S”、“3C”、“3H”、“3D”、“4S”、“4C”、“4H”、“4D”、“5S”、“5C”、“5H”、“5D”、“6S”、“6C”、“6H”、“6D”、“7S”、“7C”、“7H”、“7D”、“8S”、“9S”、“9C”、“9H”、“9D”、“10S”、“10H”、“10D”、“11C”、“11H”、“11D”、“12C”、“12H”、“12D”、“12C”、“12C”、“12D”、“7C”、“7C”、“8C”、“8C”、“8C”、“13C”、“13D”、“13D”];
var handUser=[];
var handcup=[];
var shuffledDeck=[];
对于(变量i=51;i<1;i--){
var randomNumber=Math.floor(Math.random()*(i+1));
控制台日志(cardDeck[随机编号]);
}
}
for循环迭代器i开始时大于1,因此它不小于1。将操作符改为>,而不是,这非常简单,实际上,for循环的条件从来都不是真的,它应该是i>==0
。如果i=51
,则i<1
将永远不会为真。您的解决方案的一个问题是,它不能保证每次都会返回一张唯一的卡,我认为您希望保证这一点
如果这是真的,则此解决方案将迭代52次,每次使用拼接
方法从卡组中取出卡:
var cardDeck = ["1S", "1C", "1H", "1D", "2S", "2C", "2H", "2D", "3S", "3C", "3H", "3D", "4S", "4C", "4H", "4D", "5S", "5C", "5H", "5D", "6S", "6C", "6H", "6D", "7S", "7C", "7H", "7D", "8S", "8C", "8H", "8D", "9S", "9C", "9H", "9D", "10S", "10C", "10H", "10D", "11S", "11C", "11H", "11D", "12S", "12C", "12H", "12D", "13S", "13C", "13H", "13D", ];
var total = cardDeck.length;
for (var i = 0; i < total; i++) {
var randomPos = Math.floor((Math.random() * (cardDeck.length-1)));
var randomCard = cardDeck.splice(randomPos, 1).pop();
console.log(randomCard);
}
var cardDeck=[“1S”、“1C”、“1H”、“1D”、“2S”、“2H”、“2D”、“3S”、“3C”、“3H”、“3D”、“4C”、“4H”、“4D”、“5S”、“5C”、“5H”、“5D”、“6S”、“6C”、“6H”、“6D”、“7S”、“7C”、“7H”、“7D”、“8S”、“8D”、“9S”、“9H”、“9D”、“10S”、“10H”、“10D”、“11S”、“11H”、“11D”、“12S”、“12H”、“12D”、“12H”、“12D”、“13D”、“13H”, ];
var总计=cardDeck.length;
对于(变量i=0;i
函数shuffleCards(){
console.log('test')
var cardDeck=[“1S”、“1C”、“1H”、“1D”、“2S”、“2C”、“2H”、“2D”、“3S”,
“3C”、“3H”、“3D”、“4S”、“4C”、“4H”、“4D”、“5S”、“5C”、“5H”、“5D”、“6S”、“6C”,
“6H”、“6D”、“7S”、“7C”、“7H”、“7D”、“8S”、“8C”、“8H”、“8D”、“9S”、“9C”、“9H”、“9D”,
“10S”、“10C”、“10H”、“10D”、“11S”、“11C”、“11H”、“11D”、“12S”、“12C”、“12H”、“12D”,
“13S”、“13C”、“13H”、“13D”];
var handUser=[];
var handcup=[];
var shuffledDeck=[];
对于(变量i=51;i>0;i--){
var randomNumber=Math.floor(Math.random()*(i+1));
控制台日志(cardDeck[随机编号]);
}
}
洗牌
这很有效…还有一种洗牌方法。 此方法显示了一种不拼接原始阵列的方法。 对于小型阵列,克隆阵列并在必要时从中删除项目非常简单快捷,但是如果我们处理的是一个真正的大型阵列,那么使用对象跟踪使用过的项目是一种很好的方法
function shuffleCards() {
var cardDeck = ["1S", "1C", "1H", "1D", "2S", "2C", "2H", "2D", "3S", "3C", "3H", "3D",
"4S", "4C", "4H", "4D", "5S", "5C", "5H", "5D", "6S", "6C", "6H", "6D",
"7S", "7C", "7H", "7D", "8S", "8C", "8H", "8D", "9S", "9C", "9H", "9D",
"10S", "10C", "10H", "10D", "11S", "11C", "11H", "11D",
"12S", "12C", "12H", "12D", "13S", "13C", "13H", "13D"];
var used = {};
var shuffledDeck = [];
while (shuffledDeck.length < 52) {
var randomNumber = Math.floor(Math.random() * (51 + 1));
if (!used[randomNumber]) {
shuffledDeck.push(cardDeck[randomNumber]);
used[randomNumber] = true;
}
}
console.log(shuffledDeck.length, shuffledDeck);
}
shuffleCards();
函数shuffleCards(){
var cardDeck=[“1S”、“1C”、“1H”、“1D”、“2S”、“2C”、“2H”、“2D”、“3S”、“3C”、“3H”、“3D”,
“4S”、“4C”、“4H”、“4D”、“5S”、“5C”、“5H”、“5D”、“6S”、“6C”、“6H”、“6D”,
“7S”、“7C”、“7H”、“7D”、“8S”、“8C”、“8H”、“8D”、“9S”、“9C”、“9H”、“9D”,
“10S”、“10C”、“10H”、“10D”、“11S”、“11C”、“11H”、“11D”,
“12S”、“12C”、“12H”、“12D”、“13S”、“13C”、“13H”、“13D”];
使用的var={};
var shuffledDeck=[];
而(shuffledDeck.length<52){
var randomNumber=Math.floor(Math.random()*(51+1));
如果(!使用了[randomNumber]){
shuffledDeck.push(cardDeck[randomNumber]);
使用的[随机数]=真;
}
}
log(shuffledeck.length,shuffledeck);
}
shuffleCards();
在for循环中,
for(var i=51;i<1;i--)
i从不小于1。也许应该是>1,如果您希望每张卡片只出现一次,请查看感谢您的快速响应,我知道它还不会返回唯一的卡片。我只是想先让这个循环发挥作用,然后再在每次迭代中从数组中拼接出元素。谢谢你的帮助。@Will你在哪里运行它?你的逻辑不起作用。循环没有给出52张随机卡。@Will问题不是52张随机卡,而是52个从列表中返回卡的随机数。语义我知道,但他的问题是for循环。
function shuffleCards() {
var cardDeck = ["1S", "1C", "1H", "1D", "2S", "2C", "2H", "2D", "3S", "3C", "3H", "3D",
"4S", "4C", "4H", "4D", "5S", "5C", "5H", "5D", "6S", "6C", "6H", "6D",
"7S", "7C", "7H", "7D", "8S", "8C", "8H", "8D", "9S", "9C", "9H", "9D",
"10S", "10C", "10H", "10D", "11S", "11C", "11H", "11D",
"12S", "12C", "12H", "12D", "13S", "13C", "13H", "13D"];
var used = {};
var shuffledDeck = [];
while (shuffledDeck.length < 52) {
var randomNumber = Math.floor(Math.random() * (51 + 1));
if (!used[randomNumber]) {
shuffledDeck.push(cardDeck[randomNumber]);
used[randomNumber] = true;
}
}
console.log(shuffledDeck.length, shuffledDeck);
}
shuffleCards();