我的简单rng代码不起作用.为什么会这样



我是Javascript的新手,现在我刚刚看了一个3小时的教程,并参加了一些私人编程课程。我被分配了我的第一个项目,我试图模拟两支军队之间的战斗。这是代码。

var myArmy = ["arcieri", "fanteria", "cavalleria", "morale"]  // <--- my Army brigades
function rng_loop() {
Math.floor(Math.random * myArmy.length)  // <---- the rng function
}
while (myArmyStrength > 0 && enemyArmyStrength > 0) {
rng_loop()
} if (rng_loop() > 1) {
enemyArmyStrength - 25
} else if (rng_loop() < 1) {
myArmyStrength - 20
}
/* this is what was supposed to be my loop generating random numbers and killing off both armies based on the value of said random numbers until one of the two armies got to 0. myArmyStrength and enemyArmyStrength were specified earlier on. */
if (myArmyStrength > 0 && enemyArmyStrength <= 0) {
console.log("we won the battle! Roma invicta!")
} else if (myArmyStrength <= 0 && enemyArmyStrength > 0) {
console.log("We lost the battle...")
} 
/* this if else statement was supposed to console.log a message either announcing a victory or defeat to the enemy army, but it's not console.logging anything. Why is that so? */

四个问题

1.你的函数需要返回一些东西

目前你正在计算一些东西,然后把结果扔掉。你必须做的是return结果。此外,正如上面一位评论者所指出的,在Math.random之后需要(),因为您希望执行函数Math.random

function rng_loop() {
return Math.floor(Math.random() * myArmy.length) 
}

2.每个循环不要调用函数3次:只调用一次,并存储值

我在下面的代码中称之为fightOutcome。如果不这样存储,每次调用rng_loop((函数时,它都会返回一个不同的数字。第一个调用将被丢弃,更重要的是,后两个调用(对于">1"one_answers"<1"(将不协调,即您可以同时触发第一个第二个!或者两者都没有。

3."while"的{}中的代码需要包括所有"if">

while (myArmyStrength > 0 && enemyArmyStrength > 0) {
const fightOutcome = rng_loop()
if (fightOutcome > 1) {
enemyArmyStrength -= 25
} else if (fightOutcome < 1) {
myArmyStrength -= 20
}
}

4.你把"-="拼写错了`-`

您正试图使用减少两个手臂强度变量

enemyArmyStrength -= 25;

但不幸的是,你只写了

enemyArmyStrength - 25

这样做只是计算你的enemyArmyStrength-25,然后把结果扔掉,而不是把它写进enemyArmMyStrength变量中。

奖金建议:不要单独测试1等

有两个问题。首先,非常罕见的可能性是,该值正是1。在这里极不可能,但当您为">quot;以及";不是>";。正确的方法是让一个人成为"<1〃;而另一个">1〃;。(也可以将=移到<一侧(。

第二,很容易犯错误。(事实上,你已经做到了!(

我的建议是只测试问题的一半,并使用else来处理另一种可能性。

if (fightOutcome > 1) {
enemyArmyStrength - 25
} else {
myArmyStrength - 20
}

你的后续问题`很抱歉打扰你,我应用了你建议的修改,但遗憾的是控制台仍然没有记录任何结果。知道为什么吗`对不起,我现在也解释了第四个错误。

let myArmyStrength = 20;
let enemyArmyStrength = 30;
var myArmy = ["arcieri", "fanteria", "cavalleria", "morale"]
function rng_loop() {
return Math.floor(Math.random() * myArmy.length) 
}
while (myArmyStrength > 0 && enemyArmyStrength > 0) {
if (rng_loop() > 1) {
enemyArmyStrength -= 25
} else {
myArmyStrength -= 20
}
}
if (enemyArmyStrength <= 0) {
console.log("we won the battle! Roma invicta!")
} else  {
console.log("We lost the battle...")
}

如果你运行上面的剪辑,它现在可以工作了。

最新更新