【问题标题】:Can I use 2 loop statement in one loop?我可以在一个循环中使用 2 个循环语句吗?
【发布时间】:2020-10-22 06:54:15
【问题描述】:

这个循环语句是否正确? 如果不正确,那么还有什么替代方法? 我正在尝试像这样 o(n) 循环语句-

for(int i=0 ; i<n  ; i++ , j=n ; j<n*2 ; j++){
    continue;
  }

【问题讨论】:

  • 这没有意义...终止标准是什么?
  • 不,循环语句不正确。
  • 应该在两个条件都为真或只有一个条件为真时终止?

标签: c++ c for-loop


【解决方案1】:

构造错误,你不能在一个构造中使用两个循环,但你可以有多个变量来控制迭代。

例如,你可以有

  • 两个(或更多)变量,ij,使用特定值初始化。
  • 循环控制语句,涉及对ij(以及其他,如果已定义)的操作和条件检查。
  • 最后,您可以控制ij(以及其他,如果已定义)的递增或递减。

样本构造可以是:

 for (int i = 0, j = n; i < n && j < n * 2; ++i, ++j)
                                            |^^^^^^^| -------- variable modification
      |               |   |^^^^^^^^^^^^^^^^^| ---------------- loop condition
      |^^^^^^^^^^^^^^^|--------------------------------------- initialization

【讨论】:

    【解决方案2】:

    你似乎想要的是这样的:

    for (int i = 0, j = n; i < n && j < n * 2; ++i, ++j)
    {
        continue;
    }
    

    为了帮助您更好地理解我所做的事情和原因,以及将来如何进行此类转换,您需要了解编译器如何真正处理 for 循环:作为特殊的 while 循环。

    例如,如果你有

    for (a; b; c)
    {
        d;
    }
    

    那么这就相当于:

    {
        a;
        while (b)
        {
            d;
            c;
        }
    }
    

    如果我们以while 循环的形式获取您(可能)想要的东西,那么它将是

    {
        int i = 0, j = n;  // a in my example above
        while (i < n && j < n * 2)  // b in my example above
        {
            continue;  // d in my example above
            ++i, ++j;  // c in my example above
        }
    }
    

    现在很容易将其转换为我最初展示的for 循环。

    正如评论中所述,此处显示的while 循环有点误导,因为它实际上不会执行增量。但是我假设您的真实循环没有无条件的 continue 语句作为正文中的唯一语句。这将使循环变得毫无意义。然而,原则仍然有效,即使示例无效。

    【讨论】:

    • 我发现这种误导。在您的“翻译”中,当d 继续时,c 永远不会达到 - 而实际上ij 每轮都会增加。也许你可以多指出一点。
    【解决方案3】:

    如果您只想在其中两个为真时运行循环,则在两个条件之间使用 && 例如:for(int i=0 ; i&lt;n ; i++ &amp;&amp; j=n ; j&lt;n*2 ; j++) { continue; }

    或者如果你只想在其中任何一个成为真正的情况下运行循环,使用 ||两个条件之间 例如:for(int i=0 ; i&lt;n ; i++ || j=n ; j&lt;n*2 ; j++) { continue; }

    ie, && 代表逻辑与 ||代表逻辑或

    【讨论】:

    • 他对“两个循环”的排序是 for(for-loop1 , for-loop2)。没关系,但是您的循环看起来很乱,请参阅 Sourav Ghosh 的答案以获得正确的翻译。您的评论仍然有效:在 && 和 || 之间进行选择用于组合结束条件。
    【解决方案4】:
    for(int i=0 ; i<n  ; i++ , j=n ; j<n*2 ; j++){
        continue;
      }
    

    上面的代码是错误的 但可以写成

    for(int i = 0 ,j = n; i < n ,j < n * 2; i++ ,j++)
    

    上面的代码是正确的 i=0j=n 正在初始化 i&lt;nj&lt;n*2 是循环条件 i++j++ 是递增的

    【讨论】:

      猜你喜欢
      • 2016-04-03
      • 1970-01-01
      • 1970-01-01
      • 2015-12-17
      • 2018-03-11
      • 2020-03-26
      • 2011-02-24
      • 1970-01-01
      • 2022-07-22
      相关资源
      最近更新 更多