如何将52个随机生成的数字打印到控制台?

时间:2016-03-29 21:14:00

标签: javascript html css

简单的代码,在纸牌游戏上工作,但是我在开始时遇到了这个错误。我试图生成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>

5 个答案:

答案 0 :(得分:0)

for循环迭代器i的起始值大于1,因此它不小于1.将运算符更改为&gt;而不是&lt;

答案 1 :(得分:0)

这很简单,你的for循环条件永远不会是真的,应该是i >== 0。如果i = 51i < 1永远不会成真。

答案 2 :(得分:0)

您的解决方案存在的问题是,它并不保证每次都会返回一张唯一的卡片,我认为您需要保证。

如果这是真的,那么这个解决方案将迭代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);
}

答案 3 :(得分:0)

<!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>

这有效......

答案 4 :(得分:0)

这是另一种洗牌的方法。 此方法显示了一种不拼接原始数组的方法。 对于一个小数组,可以快速轻松地克隆数组并根据需要从中删除项目,但如果我们处理的是一个非常大的数组,那么使用对象跟踪已使用的项目是一种很好的方法。

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();