gpt4 book ai didi

Javascript随机数组检查器错误

转载 作者:行者123 更新时间:2023-12-02 15:55:26 25 4
gpt4 key购买 nike

正在开发游戏,无法弄清楚为什么我的功能无法正常工作..

Uncaught RangeError: Maximum call stack size exceeded

据我所知,我的一个函数有一个无限循环(?)

我有一个阵列,需要有 3 个随机速度。

var randomSpeeds = new Array();

我有一个函数可以生成随机速度:

function generateSpeed() {
var randomSpeed = Math.random().toFixed(1) * 5;
if(randomSpeed == 0){
randomSpeed = 1;
}
return randomSpeed;
}

数组由以下函数填充:

function fillSpeedArray() {
for(var i = 0; i < 3; i++) {
var randomSpeed = generateSpeed();
if(speedArrayChecker(randomSpeed) != false) {
randomSpeeds.splice(i, 0, randomSpeed);
} else {
fillSpeedArray();
}
}
}

该函数循环 3 次,每次生成一个随机速度,并通过 if/else 语句检查数组是否已获得随机生成的数字 (speedArrayChecker)。

speedArrayChecker:

function speedArrayChecker(speed) {
for(speeds in randomSpeeds) {
if(speeds != speed) {
return true;
}
}
return false;
}

最后一个函数遍历数组,如果数组已经是随机生成的数字,则返回 true,否则返回 false。

调用并检查的函数:

fillSpeedArray();
console.log(randomSpeeds);

出于某种原因,我没有看到这些功能无法正常工作。谢谢并致以问候。

最佳答案

解决方案:

var randomSpeeds = new Array();
function generateSpeed() {
var randomSpeed = Math.random().toFixed(1) * 5;
if(randomSpeed == 0){
randomSpeed = 1;
}
return randomSpeed;
}
function fillSpeedArray() {
while (randomSpeeds.length < 3) {
var randomSpeed = generateSpeed();
if (speedArrayChecker(randomSpeed) != false) {
randomSpeeds.splice(randomSpeeds.length, 0, randomSpeed);
}
}
}
function speedArrayChecker(speed) {
return randomSpeeds.indexOf(speed) === -1
}
fillSpeedArray();
console.log(randomSpeeds);

说明:

您的代码存在两个问题。

  1. speedArrayChecker 函数的实现存在根本性缺陷。仅当 randomSpeeds 为空时才返回 false
  2. 您遇到了由无限递归引起的无限循环。

解决方案是更正 speedArrayChecker 实现并使用 while 循环而不是 for 循环。

关于Javascript随机数组检查器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31588240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com