【问题标题】:Difference between 'for index' and traditional 'for loop'“for index”和传统“for loop”的区别
【发布时间】:2016-05-15 15:47:29
【问题描述】:

我是 Swift 新手,对编程也很陌生。我不确定是不是因为现在是凌晨 2 点 34 分,但有人可以帮我确定这两个循环之间的区别吗?

第一个导致我想要的值使用(如 Swift 文档解释的那样)一个“传统 C 循环”,之后的一个使用看起来像 Swift 首选的“for index”循环(我个人喜欢因为它对我来说更清楚),问题是这个循环返回每个数字而不是满足条件。

func findLargestPrimeFactor(number: Int) {
    for var i = 2; i < number; i += i {
        if number/i % 1 > 0 {

        } else {
            print(i);
        }
    }
}

findLargestPrimeFactor(13195);

下面是返回每个数字到 13195

func findLargestPrimeFactor(number: Int) {
    for i in 2...number {
        if number/i % 1 > 0 {

        } else {
            print(i);
        }
    }
}

findLargestPrimeFactor(13195);

【问题讨论】:

  • 您的第一个函数在每次迭代时将i 添加到自身。第二个函数没有,它只是增加i
  • 旁注:number/i % 1 &gt; 0 毫无意义,因为它永远不会是真的。您的两个函数都不计算给定数字的最大素数。 – 你在projecteuler.net/problem=3 上工作吗? :)
  • @MartinR 你说得对,我在提交问题时意识到了这一点,但在找到解决方案之前不想过早编辑它。我现在觉得很愚蠢(就像我提到的,已经很晚了:p)
  • 最大的不同是在秋季 3.0 出来的时候,c 风格的迭代将从 Swift 中移除。
  • @MartinR 哦,是的,我是 :) 我是一名试图掌握开发的设计师!

标签: swift loops for-loop


【解决方案1】:

我意识到我的错误是多么愚蠢,首先我不知道我为什么要这样做 i += i,这根本没有意义。

此外,我的条件从未得到满足,因为我在真正需要浮点数时将其声明为 Int,因为我关心余数!

编辑:我再次更新了我的代码(考虑了每个人的反馈),我对此感觉好多了,并将继续研究解决方案。

感谢大家的帮助!

更新代码

func findLargestPrimeFactor(number: Int) {
    for i in 2...number {
        var n = Float(number)
        var count = Float(i)
            if n/count % 1 > 0 {
                print("not divisible")
            } else {
            print(i)
        }
    }
}

findLargestPrimeFactor(13195);

【讨论】:

  • 不要在 for 循环中使用浮点数。要查看一个数字是否可以除以另一个数字,只需使用 (number % i == 0)。也不要使用 C 风格的循环,因为它们将在下一个版本中从 Swift 中删除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-24
  • 2022-07-16
  • 2016-02-08
  • 1970-01-01
相关资源
最近更新 更多