[英]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>
for循環迭代器i的開頭大於1,因此不小於1。將運算符更改為>而不是<
確實很簡單,for循環的條件永遠不會成立,應該是i >== 0
。 如果i = 51
則i < 1
永遠不會為真。
您的解決方案存在一個問題,那就是它不能保證每次都會退回唯一的卡,我認為這是您要保證的。
如果是這樣,那么此解決方案將重復執行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);
}
<!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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.