【问题标题】:if-else statement nested in while-loopsif-else 语句嵌套在 while 循环中
【发布时间】:2016-05-09 08:46:36
【问题描述】:

我是 Javascript 的初学者。我不太确定在哪里适当地询问,我想既然我已经跟踪 Stack Overflow 一段时间了,这可能是最终创建一个帐户并在这里开始我的个人资料的合适时间。我正在阅读的这本书实际上没有任何形式的帮助论坛。

无论如何,我正在阅读一本与一些 JS 练习相结合的书,我想尝试结合包含嵌套 if..else 语句的 while-loops 的原理。我的代码如下:

var teams = ["Chiefs", "Bees", "Tigers", "Bears"];
var i = 0;
while (i < teams.length) {
  if (teams[i] === "Lions") {
    alert(teams[i] + " is at Index " + i + " in the array");
    break;
  } else {
    alert("Query not found!");
    break;
  }
  i++;
}

该练习只是假设使用 whileif 的概念,但显然出于对编程的好奇心,我想添加 else 声明,但我无法让代码工作。我让代码正常工作的唯一实例是没有 else 语句。

我的主要目标/好奇心是我希望它提醒“未找到查询!”当 if 语句在数组中找不到字符串时,在这种情况下我写了“Lions”。

提前感谢您的帮助!

【问题讨论】:

  • 从 else 中删除中断。
  • 哦,对不起!我忘记将 teams[i] === "Tigers" 更改为不在数组中的其他内容。这就是我所追求的,当它在团队数组中找不到字符串时会显示 else 警报!
  • ifelse 控件中删除break 语句,您将得到“找不到查询!”警告teams 数组中不是“Tigers”的每个项目。
  • 这样不行。 'else' 将在 'if' 不匹配时执行。
  • 您可以在 if 中设置一个标志,然后在循环完成后对其进行测试。

标签: javascript if-statement while-loop


【解决方案1】:

您可以在找到某物时决定是否找到它。但是只有在查看完所有内容后才能确定未找到某些内容,这应该在循环之外。

var teams = ["Chiefs", "Bees", "Tigers", "Bears"];
var i = 0, position = null;
while (i < teams.length) {
  if (teams[i] === "Lions") {
    position = i;
    break;
  }
  i++;
}
if (position !== null) {
  alert(teams[position] + " is at Index " + position + " in the array");
} else {
  alert("Query not found!");
}

【讨论】:

  • 这似乎有效!我想我对 if..else 和 while 循环的理解仍然非常基础,因为“位置”命令对我来说是新的。我以为我只需使用简单的 while..if-else 循环语法就可以使它工作。但话又说回来,上面的代码本身一定已经很简单了...谢谢!
  • position 不是命令,只是我用来跟踪我们在哪里找到我们正在寻找的东西的变量。我没有使用任何新语法:你的逻辑是错误的,而不是语言本身。
  • 这就是我的意思!我的理解/逻辑仍然非常基础。我什至不知道变量可以相邻声明(我认为每行都需要一个 var 声明),例如:var i = 0; var position = null; 这就是我猜var i = 0, position = null; 的意思? null 声明对我来说也是新的。如果这个评论的格式是乱码,我很抱歉。我正在阅读如何使用正确的降价。已经爱上了这个社区!谢谢!
  • 是的,var i = 0, position = null; 等价于var i = 0; var position = null;null 是一个特殊值,基本上表示“没有适用值”。
【解决方案2】:

你需要删除'break;'从 else 循环。当没有找到“Tigers”时,该中断将在第一次迭代(当 i 为 0 时)终止您的 while 循环。

break 适用于循环结构,而不是 if/else。我猜你认为它会打破/结束 else 块,但它实际上打破了 while 循环。

【讨论】:

    【解决方案3】:

    不需要休息,但您仍然可以在if 中留下一个以结束循环:

    Working Example

     var teams = ["Chiefs", "Bees", "Tigers", "Bears"];
     var i = 0;
     while (i < teams.length) {
      if (teams[i] === "Tigers") {
        alert(teams[i] + " is at Index " + i + " in the array");
        // can still put a break here to stop looping if you want.
      } else {
        if (i === teams.length - 1) {
          alert("Query not found!");
        }
      }
      i++;
    }
    

    【讨论】:

    • 两个问题:风格问题,两个地方都有终止条件(DRY)不好;并且您的i == teams.length 永远不会评估为真,正如您在while 中断言的那样,您只会在i &lt; teams.length 时循环,并且您不会在两个条件之间更改i。将i++ 移动到内部if 上方(或写if (++i === teams.length) 将解决后一个问题。
    猜你喜欢
    • 2023-03-30
    • 2017-02-06
    • 2020-06-22
    • 2012-03-12
    • 2015-12-28
    • 2016-02-14
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多