【问题标题】:if statement returns both if and else if at same time?if 语句同时返回 if 和 else if?
【发布时间】:2013-09-09 05:17:06
【问题描述】:

我正在尝试编写一个代码来随机化一个数字(1 - 100),然后打印从 40 到那个奇数的所有奇数。如果数字小于 40,它应该打印所有数字,直到随机数。

即如果数字是 45,它应该打印 41、43、45。如果它是 5,它应该打印 1、2、3、4、5。

在我添加else if 语句之前,我的以下代码一直有效。如果数字高于 40,当我添加它时,它仍然包括从 0 到 40 的所有数字吗?我不明白为什么我认为if 语句应该采用一种或另一种方式而不是两者兼而有之?

任何想法有助于解决这个问题,或者我做错了什么?

提前致谢

function myFunc() {

var x = Math.floor(Math.random() * 100);
var counter = [];

for (var i = 0; i < x; i++) {
    if (i > 40 && i % 2 == 1) {
        counter.push(i);
    } else if (i < 40) {
        counter.push(i);
    }
}

return counter + ',' + x;

}

console.log(myFunc())

【问题讨论】:

  • 在循环中,变量i从0开始一直上升到x。如果x &gt; 40 循环仍然会从0 到40 迭代i,然后到x。你有什么不清楚的地方?也许你想检查 x &gt; 40 或 ○x ? Anyway be aware that using this type of cases excludes the possibility in which x is 40`!
  • 您没有在循环中检查x &lt; 40。您需要检查它以确定您希望循环对每个 i 执行什么操作。

标签: javascript if-statement for-loop return-value


【解决方案1】:

只需添加一个新变量来检查从哪里开始。这样你也可以缩短循环中的条件。

function myFunc() {

  var x = Math.floor(Math.random() * 100);
  var counter = [];
  var start = x >= 40 ? 40 : 0; // new variable

  for (var i = start; i < x; i++) {
    if (i % 2 === 1) { counter.push(i); }
  }
  return counter + ',' + x;
}

console.log(myFunc())

【讨论】:

  • 完美,谢谢。有一件事我不明白。为什么这里的变量start 只适用于三元运算符而不适用于 if..else 语句?我理解它们是同一个东西,只是语法不同?
  • 没问题。在这种情况下,可能应该将其标记为最佳答案:)。它将与 if...then 一起使用,但这取决于我猜你是如何声明它的。 if (x &gt;= 40) { var start = 40; } else { var start = 0; }。是这个意思吗?
  • 啊,就是这样,它确实可以双向工作,我的错误。如何在此处标记为最佳答案?原谅无知,新来的网站。
  • @moonshineOutlaw,我的答案旁边应该有一个勾号。点击它,它会变成绿色。
【解决方案2】:

你写的条件不正确:

else if (i < 40)

运行这条语句,因为第一条语句是假的,并且 i 正在进行 1,2,3,4, 您必须将第二个语句更改为 x

function myFunc() {

var x = Math.floor(Math.random() * 100);
var counter = [];

for (var i = 0; i < x; i++) {
    if (i > 40 && i % 2 == 1) {
        counter.push(i);
    } else if (x <= 40) { // only when x <= 40
        counter.push(i);
    }
}

return counter + ',' + x;

}

console.log(myFunc())

【讨论】:

    猜你喜欢
    • 2021-08-31
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 2020-07-30
    • 2019-04-09
    • 2014-11-11
    相关资源
    最近更新 更多