2013-03-22 118 views
1

我正在制作一个游戏,其中包含15-30块石块,用户和计算机都会拿石块直到最后一块石块被拿走。但是,我需要一个函数来确定用户使用的宝石数量是否有效,这意味着它小于或等于3且大于0.所以我的函数应该返回true或false,但是当我输入“ 2“,它返回false。下面是invovled代码:从函数返回布尔值

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 .--每当石头去三下玩家还是计算机可能需要更多的石头比是可用的,这就是为什么第一个if语句是存在的。

+0

当你进入2结石采取什么是石头的价值?我猜你的第一个条件失败 – 2013-03-22 00:58:44

+0

在这里看起来有效:http://jsfiddle.net/2gCD9/ – 2013-03-22 00:59:17

+0

如果JSFiddle不起作用(当我试图打开我自己的链接时它不适用于我)。 http://codepen.io/anon/pen/oxeKp它的工作原理。 – 2013-03-22 01:01:15

回答

1

那是因为你比较字符串:

"19" >= "2" // false 

你要投至少一个变量转换成整数,假设他们两个字符串:

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

在我写的代码中: 'var stonesTaken = document.getElementById(“userTake”)。value * 1; ' 我认为会强制字符串变成整数 – anandp773 2013-03-22 01:11:06

+1

好吧,'validEntry(24,2)'为我提供了'true',所以其他的东西一定是关闭的。 – 2013-03-22 01:43:07

+0

@ user2197420 - 它的确如此。 – RobG 2013-03-22 01:47:38

0

确保你传递整数值或只是使用parseInt() @Jared Farrish在评论中提到。

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; 
    } 
}