如何将52个随机生成的数字打印到控制台
How to print 52 randomly generated numbers to the console?
简单的代码,用于纸牌游戏,但我在一开始就遇到了这个错误。我正在尝试生成52个随机数,并打印出与之相关的适当数组元素。这是我的代码:
<!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>
您的解决方案的一个问题是,它不能保证每次都会返回一张唯一的卡,我想您应该保证这一点。
如果这是真的,那么这个解决方案将迭代52次,每次都使用splice
方法从牌组中取出一张牌:
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);
}
for循环迭代器i的起始值大于1,因此它不小于1。将运算符更改为>,而不是<
这真的很简单,for循环的条件从来都不是真的,它应该是i >== 0
。如果i = 51
,那么i < 1
将永远不会为真。
<!DOCTYPE html>
<html>
<head>
<script>
function 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 handCPU = [];
var shuffledDeck = [];
for (var i = 51; i > 0; i--) {
var randomNumber = Math.floor(Math.random()*(i + 1));
console.log(cardDeck[randomNumber]);
}
}
</script>
</head>
<body>
<button onclick="shuffleCards()">Shuffle Cards</button>
</body>
</html>
这很有效。。。
这里还有一个洗牌的方法。此方法显示了一种不拼接原始阵列的方法。对于小阵列,克隆阵列并根据需要从中删除项目既快捷又容易,但如果我们处理的是一个非常大的阵列,使用对象跟踪使用过的项目是一种很好的方法。
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();
相关文章:
- 打印到控制台时为NaN,但typeof为数字jquery
- $index ng 单击内不打印数字
- 将 JavaScript “for” 生成的数字推送到一个数组中,然后将每个数字打印为 HTML
- 如何使用angularJs打印数字表
- JavaScript打印的数字有20位小数
- 如何将52个随机生成的数字打印到控制台
- 如何在文本字段中输入数字时立即打印结果
- 对于我需要打印出从 1 到 20 的数字的循环
- 在Javascript的警告框中打印任何数字的乘法表
- 我是否可以动态更改带有数字的图像,然后将其打印为 PDF
- JS:点击不同的按钮应该在屏幕上打印不同的数字,但它只会打印一个数字
- 使用 setInterval 逐个打印数字,我得到未捕获的引用错误
- 使用规则打印 1 到 20 之间的数字
- 我想在Javascript中打印两个数字的总和
- I'我试图创建一个函数,将范围(0-100)内的三个数字随机化,并打印最大的一个
- 用JavaScript打印数字的递归函数
- 代码打印数字,直到3时'It’应该打印到5点
- 如何在Javascript代码中每行打印10个数字/短语
- Knockout.JS打印一个数字列表
- 当我使用document.write函数在下面的代码中打印数字时,它会在每个输出的右侧插入0.为什么会发生这种事