2013-03-22 210 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; 
    } 
}