我正在尝试编写一个程序,打印从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),但是我不想在不知道其背后原因的情况下无意识地随意移动。
如何使用条件运算符查找这些异常?我在做什么错了?
谢谢。
答案 0 :(得分:3)
您需要先检查数字是否(被3除以 被4除以),然后再检查是否被3或4除以(分别)条件if (i % 3 == 0)
的取值为true
,您将得到yes
而不是yes, yes and yes
。您还应该在条件语句中push
到result
,而不是在条件语句中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());