【问题标题】:Loop is not doing what expected循环没有做预期的事情
【发布时间】:2015-03-16 12:24:51
【问题描述】:

我正在研究 Obj-C,现在我不明白为什么我的循环不能正常工作。我知道一种方法可以通过单个while 循环来实现结果,但我想通过do while 来做到这一点并且无法弄清楚出了什么问题。

我想要的是,为整数 5、10、15 显示名为 triangularNumber 的整数,依此类推。这是我尝试过的:

for (int i=1; i<51; i++){


            int triangularNumber;

            do {
                triangularNumber = i * (i+1)/2;


                NSLog(@"Trianglular number is %i", triangularNumber);

            }
            while (i%5 == 0);

        }

它会产生奇怪的结果: 1) 不满足 i%5==0 的条件,它输出 1,3,6,10 然后无限个 15 2) 它创建了一个无限循环

请告诉我,该代码有什么问题以及如何修复它。谢谢!

【问题讨论】:

  • 您不会更改 i 块中的 do。要么永远不会循环,要么永远循环。
  • @Mat,如何解决?
  • 好吧,你修正了逻辑。为什么你有那个 do/while 循环呢?什么时候应该循环?
  • @Mat,它假设只在 i 为 5、10、15 等时进行计算。这就是为什么我检查 while (i%5 == 0)。
  • 但这没有意义。如果i%5==0 在第一次检查while 条件时为真,那么您知道do 块将被重新执行,对吧?如果发生这种情况,在第二次执行结束时,i%5==0 仍然为真,因为您没有更改i。所以 do 块将再次运行。然后再次。再一次……do/while 是一个循环结构。您不需要循环构造。所以不要使用一个。

标签: objective-c loops


【解决方案1】:

在 for 循环中不要使用 do while 循环,而是使用 if 来检查一个数字是否可以被 5 整除。

如果你想用 do while 循环来做,你可以这样做:

int i = 5;
int triangularNumber;
do {
    triangularNumber = i * (i+1)/2;
    NSLog(@"Trianglular number is %i", triangularNumber);
    i += 5;
} while (i < 51);

您的代码不起作用的原因:

  • 在您的 do while 循环中,如果我说是 5,那么您将最终在无限循环中运行,因为您将满足您的 do while 循环条件 i%5==0
  • 您只需要 5、10、15.. 这样的数字,因此只需一个循环即可。现在循环从 1 到 50 开始,您很挑剔,因为您只需要 5 的一个元素,因此要挑剔,您可以使用 if 条件,当且仅当我的 i 是 5 的倍数时才打印。
  • Do while 将始终进入循环并执行一次。因此,对于 1,它将输入并计算 triangularNumber 为 1 * 2 /2 = 1,因此您的输出 1 并检查打印后的条件是 1 可被 5 整除,然后它会出现并将 i 增加到 2 并遵循与以上。

【讨论】:

  • 我知道如何实现结果,但我想知道,如何修复当前代码(我想了解 do-while 例程)
  • 不需要。你是说你只想通过 do while 循环来做吗?如果是这种情况,我建议您删除外部 for 循环。
  • 是的,我只需要在执行 do-while 循环时执行此操作,并且想了解为什么我的代码无法正常工作并产生奇怪的结果。
  • 谢谢你们,现在我明白了逻辑!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-17
  • 2022-10-20
  • 1970-01-01
  • 1970-01-01
  • 2020-11-26
相关资源
最近更新 更多