【问题标题】:Do I understand correctly the way logical AND works?我是否正确理解逻辑 AND 的工作方式?
【发布时间】:2013-08-05 12:01:47
【问题描述】:

我有一个简单的家庭作业:编写一个脚本,打印从 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>

【问题讨论】:

  • 也称为 fizzbuzz 测试。
  • 所以它们不能被 21 整除? :-)

标签: javascript logical-operators


【解决方案1】:

为了能被两者整除,使用 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。

【讨论】:

  • 这不起作用,可能是因为我不懂mod。我应该用if(counter % 21 != 0){ 替换if(counter % 3 !=0 &amp;&amp; counter % 7 != 0){ 吗?
【解决方案2】:

“不能同时被3和7整除”意思是

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

或者,如果我们申请De Morgan's law

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

【讨论】:

  • 很好地使用布尔逻辑:D
【解决方案3】:

如果我正确理解了分配,您希望打印出不会除以 3 和 7 但可以除以其中之一或不除的数字。 IE 3 和 7 会打印出来,因为它们可以被一个除而不是另一个,但是 21 不会打印,因为它被两个除。

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

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

【讨论】:

    【解决方案4】:

    if(计数器 % 3 !=0 && 计数器 % 7 != 0)

    这意味着如果数字可以除以 3 则 counter%3!=0 为假,因此条件为假。 (与 7 相同)。

    【讨论】:

      【解决方案5】:
      if((counter % 3) !=0 && counter % 7 != 0)
      

      应该是:

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

      或者直接使用 21 小费...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-25
        • 2019-07-10
        • 2020-07-21
        • 1970-01-01
        • 2022-08-24
        • 1970-01-01
        • 2018-10-12
        • 1970-01-01
        相关资源
        最近更新 更多