打印100到200,三个例外?

时间:2018-08-12 09:50:58

标签: javascript arrays if-statement

我正在尝试编写一个程序,打印从100到200的数字,但有以下三个例外:

如果数字是3的倍数,则应返回字符串“是”而不是数字。

如果数字是4的倍数,则应返回字符串“ yes and yes”而不是数字。

如果数字是3和4的倍数,则使用字符串“ yes,yes and yes”代替数字。

我是JavaScript的新手,所以我尝试逐步进行此操作。

我编写了这段代码,以打印100到200之间的数字:

function hundredTwoHundred() {
  result = [];
  for (let i = 100; i <= 200; i++) {
  result.push(i);
}
  return result;
}

console.log(hundredTwoHundred());

然后我尝试使用else / if作为例外:

function hundredTwoHundred() {
  result = [];
  for (let i = 100; i <= 200; i++) {
    if (i % 3 == 0) {
    console.log("yes");
  } else if (i % 4 == 0) {
    console.log("yes and yes")
  } else if (i % 3 == 0 && i % 4 == 0) {
    console.log("yes, yes and yes");
  } else {
    result.push(i)
  }
}
  return result;
}

console.log(hundredTwoHundred());

代码当然不起作用。我曾尝试过移动result.push(i),但是我不想在不知道其背后原因的情况下无意识地随意移动。

如何使用条件运算符查找这些异常?我在做什么错了?

谢谢。

3 个答案:

答案 0 :(得分:3)

您需要先检查数字是否(被3除以 被4除以),然后再检查是否被3或4除以(分别)条件if (i % 3 == 0)的取值为true,您将得到yes而不是yes, yes and yes。您还应该在条件语句中pushresult,而不是在条件语句中console.log,因为您要创建数字和{{1的数组 }} es,然后yes,然后整个构造数组

还要确保用console.log(对于ES5是result)来声明const-隐式创建全局变量不是很好。

此外,尽管在这种情况下没关系,但进行比较时,最好默认使用var而不是===-最好仅使用{ {1}}故意要依赖隐式类型强制,这会导致混乱的行为。

==

答案 1 :(得分:2)

如果数字是3和4的倍数,那么它是12的倍数。我还会使用switch语句,因此您可以按以下方式重写:

for (let i = 100; i <= 200; i = i + 1) {
  switch (0) {
    case i % 12: console.log('yes, yes and yes'); break;
    case i % 4:  console.log('yes and yes'); break;
    case i % 3:  console.log('yes'); break;
    default:     console.log(i);
  }
}

如果您希望将其作为数组:

// Fill an array with numbers from 100 to 200
const arr = Array(101).fill().map((_, i) => i + 100);

// Map it to numbers and strings
const hundredTwoHundred = arr.map(i => {
  switch (0) {
    case i % 12: return 'yes, yes and yes';
    case i % 4:  return 'yes and yes';
    case i % 3:  return 'yes';
    default:     return i
  }
});

// Print it:
console.log(hundredTwoHundred);

答案 2 :(得分:1)

当您遇到一系列复杂的条件时,需要谨慎评估它们的顺序。

function logExceptions(start, end) {
    var divisibleByThree, divisibleByFour;
    for (var i = start; i <= end; ++i) {
        divisibleByThree = i % 3 == 0;
        divisibleByFour = i % 4 == 0;
        if (divisibleByThree && divisibleByFour) {
            console.log("yes, yes and yes");
        }
        else if (divisibleByThree) {
            console.log("yes");
        }
        else if (divisibleByFour) {
            console.log("yes and yes");
        }
        else {
            console.log(i);
        }
    }
}
logExceptions(100, 200);

如果您要将结果保存在数组中并仅在以后打印:

function logExceptions(start, end) {
    var result = [];
    var divisibleByThree, divisibleByFour;
    for (var i = start; i <= end; ++i) {
        divisibleByThree = i % 3 == 0;
        divisibleByFour = i % 4 == 0;
        if (divisibleByThree && divisibleByFour) {
            result.push("yes, yes and yes");
        }
        else if (divisibleByThree) {
            result.push("yes");
        }
        else if (divisibleByFour) {
            result.push("yes and yes");
        }
        else {
            result.push(i);
        }
    }
    return result;
}
console.log(logExceptions(100, 200).toString());