如何用JavaScript中的条件语句编写硬币计数器函数?

时间:2016-03-07 00:02:28

标签: javascript

我仍然是初学者,这里的总菜鸟所以请耐心等待,我来到这个练习基本上是将pennys /美分的数量分散到25,10,5,2,1的足够数量的硬币中。

我试图只用if条件来编写,因为我还在学习,所以不熟悉内置函数。

该功能适用​​于测试的数字65,分别给出25,25,10,5的数组

然而,当我用数字46测试时,它给出了25,25,10,5,55,10,10,1的数组,这显然是假的,我的功能显然是错误的。

请你把错误指向我。

这是我的代码并提前致谢。

var co = [];
function coin(n){ //46


// co = [25,]


    if (n>=25){
        co.push("25");
        n = n-25;
        coin(n);
    }

    else if (n>=10){
        co.push("10");
        n = n-10;
        coin(n);
    }


    else if (n>=5){
        co.push("5");
        n = n -5;
        coin(n);
    }

    else if (n>=2){
        co.push("2");
        n = n - 2;
        coin(n);
    }

    else if (n>=1){
        co.push("1");
        n = n - 1;
        coin(n);
    }




    else if (n == 0){console.log(co);}


}

4 个答案:

答案 0 :(得分:3)

问题是,当您第二次调用该函数时,您不会清除该数组。你每次都需要清除它。

你可以创建一个新功能 override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { guard let cell = collectionView.dequeueReusableCellWithReuseIdentifier(identifier: "NumbersCollectionViewCell">, forIndexPath: NSIndexPath>) as? NumbersCollectionViewCell else { print("failed to get cell") return UICollectionViewCell() } switch indexPath.section { case 0: cell.imageView.image = UIImage(named: numberImageFiles[indexPath.row]) case 1: cell.imageView.image = UIImage(named: specialNumberImageFiles[indexPath.row]) default: break } return cell }

Countcoin(n)

现在调用此函数而不是function Countcoin(n){ co = []; coin(n) }

或者你只能构建一个函数但是使用循环,而不是递归。

coin

答案 1 :(得分:1)

您的代码运行正常。但是你只有全局数组 co <​​/ strong>,它保留了以前的答案。所以我认为你应该初始化函数内部的数组,然后返回它。

答案 2 :(得分:1)

您可以通过以下方式执行每项条件:

  1. 简单划分(向下舍入)

  2. 将商分配给var或元素(如输出标记)

  3. 将模数用于下一个条件

  4. <强>段

    &#13;
    &#13;
    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title></title>
    <style>
    fieldset { width: 20ex; font: 400 16px/1.4 'consolas'; color: #00e; }
    legend { font:inherit; font-size: 1.25rem; }
    input, label, output { padding: 1px 3px; font:inherit;}
    input { width: 7ex; }
    output { width: 5ex; }
    </style>
    </head>
    
    <body>
    <header></header>
    <form id="change" name="change">
    <fieldset>
    <legend>coinCounter</legend>
    <label for="inp1">$</label><input id="inp1" name="inp1" placeholder="0.00"><br/>
    <label for="q">Quarters: </label><output id="q" name="q" for="inp1">0</output><br/>
    <label for="d">Dimes:&nbsp;&nbsp;&nbsp; </label><output id="d" name="d" for="inp1">0</output><br/>
    <label for="n">Nickels:&nbsp; </label><output id="n" name="n" for="inp1">0</output><br/>
    <label for="p">Pennies:&nbsp; </label><output id="p" name="p" for="inp1">0</output>
    </fieldset>
    </form>
    <footer>Hit <kbd>&#9166; Return</kbd> before typing</footer>
    
    <script>
    var inp1 = document.getElementById('inp1');
    
    inp1.addEventListener('input', function(e) {
    	delay(coinCounter(this.value), 5000 );
    }, false);
    
    function coinCounter($) {
    	var denomination = $.split('.');
    	var dollars = Number(denomination[0] * 100);
    	console.log('dollars: '+dollars);
    	var cents = Number(denomination[1]);
    	console.log('cents: '+cents);
      var total = Number(dollars + cents);
      console.log('total: '+total);
    	var modQ, modD, modN;
    	
    	if(total >= 25){
    		var quarter = Math.floor(total / 25);
    		console.log('quarters: '+quarter);
    		document.getElementById('q').innerHTML = quarter;
    	}
    	modQ = total % 25;
    	
    	if(modQ >= 10){
    		var dime = Math.floor(modQ / 10);
    		console.log('dimes: '+dime);
    		document.getElementById('d').innerHTML = dime;
    	}
    	modD = modQ % 10;
    	
    	if(modD >= 5){
    		var nickel = Math.floor(modD / 5);
    		console.log('nickels: '+nickel);
    		document.getElementById('n').innerHTML = nickel;
    	}
    	modN = modD %  5;
    	
    	if(modN){
    		var penny = Math.floor(modN);
    		console.log('pennies: '+penny);
    		document.getElementById('p').innerHTML = penny;
    	}
    	else {
    		modN = 0;
    	}
      return false;
    }
    
    var delay = (function(){
      var timer = 0;
      return function(callback, ms){
      clearTimeout (timer);
      timer = setTimeout(callback, ms);
     };
    })();
    </script>
    </body>
    </html>
    &#13;
    &#13;
    &#13;

答案 3 :(得分:1)

既然你提到你正在学习,我想我会提交另一种方法 - 我提供了一步一步的细分。

内置使用的功能:

Array.prototype.reduce - 对累加器和数组的每个值(从左到右)应用函数以将其减少为单个值。

function coins(cents) {
    return [25, 10, 5, 1].reduce(function(totalDenoms, denom) {

    // if we have any values for this denomination, add it to the final array
    for (var i = 0; i < Math.floor(cents/denom); i++) {
        totalDenoms.push(denom);
    }

    // set the remaining amount of cents to process
    cents = cents % denom;

    // return the accumulated totals
    return totalDenoms;

    }, []);
}