javascript - 检查随机数是否在数组中,如果为真则再次随机化?

标签 javascript

我正在创建一个战舰游戏,并且我正在尝试随机化计算机的船只。然而,它有时会多次随机化同一位置,从而在某些回合中创建的船只少于 8 艘。我尝试使用 indexOf 修复此问题,但无论如何更改代码,我似乎都无法使其工作。如果随机数字位于数组 ShipLocations 中,那么我想再次重新滚动该数字,直到它是与数组中的任何数字都不匹配的数字。有什么想法吗?

var shipLocations = [];

function randShips() {

    for (i = 0; i < 8; i++) {

        var randomize = Math.floor(Math.random() * 64 + 1);

    if (shipLocations.indexOf(randomize) == true) {
        var randomize = Math.floor(Math.random() * 64 + 1);
    }

    else {
        shipLocations.push(randomize);    
    }

    } //end of i loop

} //end of randShips()

randShips();
console.log(shipLocations);

编辑:因此,在尝试了一些答案之后,在测试了大约 100 次后,这似乎按应有的方式工作。

var shipLocations = [];

function randShips() {

while (shipLocations.length < 8) {

    var randomize = Math.floor(Math.random() * 64 + 1);

    while (shipLocations.indexOf(randomize) > -1) {
        randomize = Math.floor(Math.random() * 64 + 1);
    }

    shipLocations.push(randomize);
}
}

randShips();

最佳答案

var shipLocations = [];

function randShips() {

    while ( shipLocations.length < 8 ) {
        var randomize = Math.floor(Math.random() * 64 + 1);
        while ( shipLocations.indexOf(randomize) >= 0 ) {
            randomize = Math.floor(Math.random() * 64 + 1);            
        }
        shipLocations.push(randomize);
    }

} //end of randShips()

randShips();
console.log(shipLocations);

关于javascript - 检查随机数是否在数组中,如果为真则再次随机化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26058607/

相关文章:

javascript - 链接两个选择的表单元素

java - 如何将 Javascript 中的日期与语言环境进行比较

javascript - 我如何理解从插件扩展的主干文件的位置?

javascript - 无法调试 onmouseover 事件

javascript - 在 jquery 中切换动画

javascript - 将 Unicode Javascript 字符串转换为 PHP utf8 字符串

javascript - 我无法获得在 android 10 api 29 或 api 30 上工作的 http 请求。但它确实适用于较低的 api

javascript - socket.io 是否像 sockjs 一样具有原始 WebSocket 访问权限?

javascript - 使用 javascript 的 Oracle Apex 应用程序项值设置

javascript - 当鼠标离开触发元素时如何使下拉内容保持打开状态