【问题标题】:returning boolean values from functions从函数返回布尔值
【发布时间】:2013-03-11 18:05:20
【问题描述】:

我正在制作一个游戏,从一堆 15 到 30 块石头开始,用户和计算机都取石头,直到取完最后一颗石头。但是,我需要一个函数来确定用户拿走的石头数量是否有效,即小于等于 3 且大于 0。所以我的函数应该返回 true 或 false,但是当我输入 " 2",它返回假。这是涉及的代码:

var valid = validEntry(stones, stonesTaken);

function validEntry(stones, stonesTaken) {
    if (stones >= stonesTaken) {
        if(stonesTaken <= 3 && stonesTaken > 0) {
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }
}

P.S.- 每当棋子低于 3 时,玩家和计算机都可以拿走比可用棋子更多的棋子,这就是第一个 if 语句存在的原因。

【问题讨论】:

  • 当你输入 2 取走的石头时,石头的价值是多少?我猜你的第一个条件失败了
  • 在这里看起来有效:jsfiddle.net/2gCD9
  • 如果 JSFiddle 不起作用(当我尝试打开自己的链接时,它对我不起作用)。 codepen.io/anon/pen/oxeKp 有效。
  • 您可能应该同时使用parseInt(),然后您只需要stonesTaken &lt;= 3。
  • @KevinBowersox 石头的价值是24,游戏开始时,它从未低于15。

标签: javascript function boolean


【解决方案1】:

那是因为你在比较字符串:

"19" >= "2" // false

假设它们都是字符串,您必须将至少一个变量转换为整数:

stones = parseInt(stones, 10);
stonesTaken = parseInt(stonesTaken, 10);

【讨论】:

  • 在我编写的代码的前面:var stonesTaken = document.getElementById("userTake").value * 1; 我认为这会将字符串强制转换为整数
  • 好吧,validEntry(24, 2) 给了我true,所以必须关闭其他东西。
【解决方案2】:

确保您传递整数值或仅使用 @Jared Farrish 在 cmets 中提到的 parseInt()。

function validEntry(stones, stonesTaken) {
    stones = parseInt(stones);
    stonesTaken = parseInt(stonesTaken);
    if (stones >= stonesTaken) {
        if(stonesTaken <= 3 && stonesTaken > 0) {
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }
}

【讨论】:

    猜你喜欢
    • 2017-06-07
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多