Ahmad Zughayyer Ahmad Zughayyer - 6 months ago 22
Javascript Question

While loop not executing or not looping?

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

}


the program is working but the while loop is not looping for some reasons. I suspect that there is something wrong with the condition. I am not sure if javaScript accepts that kind of conditions.However, in ruby it worked.
can someone please explain for me why is not working please?

Answer

You missed a parentheses bracket to close your while loop condition parameter. Your code should really be:

while(check_coins(hand)){

  ... 

 }

If that doesn't work, it's probably the condition itself. Try:

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

... 

}