我是否正确理解逻辑AND的工作方式?

时间:2013-08-05 12:01:47

标签: javascript logical-operators

我有一个简单的家庭作业:编写一个脚本,打印从1到N的所有数字,这些数字不能同时被3和7整除。

所以,这是我的解决方案。它的工作方式 - 它打印所有除以3或7而不是3 AND 7的数字。请帮助我理解为什么这不能正常工作。这是代码:

<!DOCTYPE html>
<html>
<head>
    <title>Loops - Task 2</title>
<link href="js-console.css" rel="stylesheet" />
</head>
<body>
    <label for="input_num">Start: </label>
    <input type="text" id="input_num" />

    <a href="#" id="btn" onclick="printNums()">Print numbers</a>

    <div id="js-console"></div>              
    <script src="js-console.js"></script>
    <script>
        var input_num;
        var counter;
        function printNums(){
            input_num = jsConsole.readInteger("#input_num");
            for (counter=1; counter<=input_num; counter++){
                if(counter % 3 !=0 && counter % 7 != 0){
                    jsConsole.writeLine(counter);
                }
              }
    }
    </script>
</body>
</html>

5 个答案:

答案 0 :(得分:2)

为了被两者整除,使用mod 21将返回0.这显示在21,42,63等中。

if(counter % 21 != 0){

修改

<!DOCTYPE html>
<html>
<head>
    <title>Loops - Task 2</title>
<link href="js-console.css" rel="stylesheet" />
</head>
<body>
    <label for="input_num">Start: </label>
    <input type="text" id="input_num" />

    <a href="#" id="btn" onclick="printNums()">Print numbers</a>

    <div id="js-console"></div>              
    <script src="js-console.js"></script>
    <script>
        var input_num;
        var counter;
        function printNums(){
            input_num = jsConsole.readInteger("#input_num");
            for (counter=1; counter<=input_num; counter++){
                if(counter % 21 != 0){
                    jsConsole.writeLine(counter);
                }
              }
    }
    </script>
</body>
</html>

mod(%)的工作方式是它将为你提供除法的其余部分。如果均匀划分4/2 = 2而没有任何遗留。但是,5/2将返回2仍然有1个余数。 2分为4次,2次均匀,剩下1次因此:4%2 = 0 5%2=1因为你说它不能同时被3和7分割,你可以将两个数字叠加在一起使用mod和第一个可分为3和7的数字是21。

答案 1 :(得分:1)

“不能同时被3和7整除”意味着

!(x % 3 == 0 && x % 7 == 0)

或者,如果我们应用De Morgan's law

x % 3 != 0 || x % 7 != 0

答案 2 :(得分:1)

如果我正确理解了作业,你想要打印出不会除以3和7的数字,但可以除以一个或不能除以它们。 IE 3和7将打印出来,因为它们可以被一个而不是另一个打印,但21不会打印,因为它除以两者。

在这种情况下,逻辑应该是:

if(!((counter%3)== 0&amp;&amp;(counter%7)== 0))

答案 3 :(得分:0)

if((counter % 3) !=0 && counter % 7 != 0)

应该是:

if (!( (counter % 3) ==0 && counter % 7 ==0))

或者只是选择21提示......

答案 4 :(得分:0)

  

if(counter%3!= 0&amp;&amp; counter%7!= 0)

这意味着如果number可以除以3,则counter%3!=0为false,因此condition为false。 (与7相同)。