gpt4 book ai didi

javascript - While 循环忽略初始条件并且浏览器崩溃

转载 作者:行者123 更新时间:2023-12-03 08:10:04 25 4
gpt4 key购买 nike

长话短说 - 我正在尝试构建一个简单的网球比赛模拟(下面的代码)。不幸的是,我的代码有问题,因为我创建的 while 循环忽略了括号中的条件并开始进行无限次数的迭代(浏览器崩溃)。你能看看我的代码并告诉我错误在哪里吗?

var gamesPlayerOne = Math.floor(Math.random() * 8);
var gamesPlayerTwo = Math.floor(Math.random() * 8);
var tiebreak = Math.floor(Math.random() * 10);
var setsPlayerOne = 0;
var setsPlayerTwo = 0;
var scoreline = [];

function playTheGame(g1, g2) {

while (setsPlayerOne < 2 && setsPlayerTwo < 2) {

if (g1 === 6 && g2 < 5) {

var result = g1.toString() + ":" + g2.toString();
setsPlayerOne += 1;
scoreline.push(result);

} else if (g1 < 5 && g2 === 6) {

var result = g1.toString() + ":" + g2.toString();
setsPlayerTwo += 1;
scoreline.push(result);

} else if (g1 === 6 && g2 === 7) {

var result = g1.toString() + ":" + g2.toString() + "(" + tiebreak + ")";
setsPlayerTwo += 1;
scoreline.push(result);

} else if (g1 === 7 && g2 === 6) {

var result = g1.toString() + ":" + g2.toString() + "(" + tiebreak + ")";
setsPlayerTwo += 1;
scoreline.push(result);

}
}
}

playTheGame(gamesPlayerOne,gamesPlayerTwo);
console.log(scoreline);

最佳答案

如果您传入函数的随机数与 if 中的任何一个都不匹配或 else if条件,那么您的任何变量都不会更新,因此 while循环的条件永远保持为真。

如果您试图模拟整个网球比赛,最好不要向函数传递任何参数,而是在 while 的每次迭代中传递。循环随机决定哪个玩家刚刚赢得了当前的游戏,然后测试是否有一个玩家已经赢得了一盘,可能是这样的:

function playTheGame() {
var g1 = 0;
var g2 = 0;
var setsPlayerOne = 0;
var setsPlayerTwo = 0;
var scoreline = [];

while (setsPlayerOne < 2 && setsPlayerTwo < 2) {
// determine a random winner for the current game
if (Math.random() < 0.5)
g1++;
else
g2++;

// has one of the players just won a set?
if (g1 >= 6 && g2 < g1 - 1) {
var result = g1 + ":" + g2;
setsPlayerOne += 1;
scoreline.push(result);
g1 = g2 = 0;
} else if (g1 < g2 - 1 && g2 >= 6) {
var result = g1 + ":" + g2;
setsPlayerTwo += 1;
scoreline.push(result);
g1 = g2 = 0;
}
}
return scoreline;
}

console.log(playTheGame());


请注意,您无需调用 .toString()g1g2 , 因为将它们与字符串 ":" 连接起来隐式地将数字转换为字符串。

您可以通过更改 if (Math.random() < 0.5) 来扩展它以使一个或另一个玩家更有可能获胜(模拟不同的技能水平)。使用变量而不是硬编码 0.5 .

附言我懒得去查网球规则来确认你是如何赢得一盘的,但我模糊的记忆是你必须至少打出 6 场比赛,并且至少领先对方两场比赛,所以这就是我展示的代码试图实现......

关于javascript - While 循环忽略初始条件并且浏览器崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39910645/

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