虽然循环没有执行或没有循环?

时间:2016-05-13 23:00:52

标签: javascript

// require '04_wonky_coins'
// require 'rspec'
//
// # Catsylvanian money is a strange thing: they have a coin for every
// # denomination (including zero!). A wonky change machine in
// # Catsylvania takes any coin of value N and returns 3 new coins,
// # valued at N/2, N/3 and N/4 (rounding down).
// #
// # Write a method `wonky_coins(n)` that returns the number of coins you
// # are left with if you take all non-zero coins and keep feeding them
// # back into the machine until you are left with only zero-value coins.
// #
// # Difficulty: 3/5
//
// describe "#wonky_coins" do
//   it "handles a coin of value 1" do
//     wonky_coins(1).should == 3
//   end
//
//   it "handles a coin of value 5" do
//     wonky_coins(5).should == 11
//     # 11
//     # => [2, 1, 1]
//     # => [[1, 0, 0], [0, 0, 0], [0, 0, 0]]
//     # => [[[0, 0, 0], 0, 0], [0, 0, 0], [0, 0, 0]]
//   end
//
//   it "handles a coin of value 6" do
//     wonky_coins(6).should == 15
//   end
//
//   it "handles being given the zero coin" do
//     wonky_coins(0).should == 1
//   end
// end
function check_coins(hand){
  for(var i=0; i<hand.length; i++){
    var coin = hand[i]
     if(coin !==0){
      return i;
    } else {
      return null;
    }
  }
  return false;
}


function wonkyCoins(n){
  var hand = [];

  hand.push(Math.floor(n/2));
  hand.push(Math.floor(n/3));
  hand.push(Math.floor(n/4));




 while(check_coins(hand){

  var indx = check_coins(hand);


  var value = hand[indx];

  var index1 = hand.indexOf(hand[indx]);

  if (index1 > -1) {
     hand.splice(index1, 1);
  }


  hand.push(Math.floor(value/2));
  hand.push(Math.floor(value/3));
  hand.push(Math.floor(value/4));

 }

return hand.length;

}

程序正在运行但是while循环由于某些原因没有循环。我怀疑这种情况有问题。我不确定javaScript是否接受这种条件。但是,在ruby中它起作用了。 有人可以帮我解释一下为什么不能正常工作?

2 个答案:

答案 0 :(得分:2)

您错过了括号括号以关闭while循环条件参数。你的代码应该是:

while(check_coins(hand)){

  ... 

 }

如果这不起作用,那可能就是条件本身。尝试:

while(check_coins(hand) !== null){

... 

}

答案 1 :(得分:0)

while语句应该像这样修复:

while (check_coins(hand)) {

check_coins功能似乎只检查第一枚硬币,应该更改为全部检查。它还返回整数,布尔值或空值中的任何一个,具体取决于条件 - 它应该只返回一个整数(第一个非零硬币的索引)或null(不是非零硬币)。

固定代码如下所示:

function check_coins(hand){
    for (var i=0; i < hand.length; i++) {
        if (hand[i] > 0) {
          return i;
        }
    }
    return null;
}

function wonkyCoins(n) {
    var hand = [];

    hand.push(Math.floor(n/2));
    hand.push(Math.floor(n/3));
    hand.push(Math.floor(n/4));

    while ((indx = check_coins(hand)) != null) {
        var value = hand[indx];
        var index1 = hand.indexOf(hand[indx]);

        if (index1 > -1) {
            hand.splice(index1, 1);
        }

        hand.push(Math.floor(value/2));
        hand.push(Math.floor(value/3));
        hand.push(Math.floor(value/4));
    }

    return hand.length;
}

代码已被清理,以使其更具可读性和惯用的Javascript。但是,它尚未经过测试。