为什么以下函数返回整数2000,即使它不能被数字3,6,7,9整除?
var counter = 1000
func divisibleByAllTenNumbers() -> Int{
for _ in 1...counter {
if counter % 2 == 0 && counter % 3 == 0 &&
counter % 4 == 0 && counter % 5 == 0 &&
counter % 6 == 0 && counter % 7 == 0 &&
counter % 8 == 0 && counter % 9 == 0 &&
counter % 10 == 0 {
break
}
else {
counter = counter + 1
}
}
return counter
}
即使预期的数字为2520,2000也显示为输出。
可能的原因是什么?
答案 0 :(得分:1)
您对counter
的使用感到困惑。它从1000开始,因此for
循环迭代1000次(1 ... 1000)。但是counter
在for
循环内从1000增加到1999。因此,您的if
语句仅检查值1000到1999,最后一个增量将其设置为2000(但由于循环结束,因此不会检查该值。
因此没有值匹配,并返回counter
(2000)的最终值。
我会将for
循环更改为更清晰。如果要检查2000 - 3000范围内的数字,请说明:
for counter in 2000...3000 {
并摆脱var counter = ...
行。
您可能还想更改返回的值以指示未找到匹配项。这对于可选项来说非常有用。
我还为您的函数提供参数以指定范围。
func divisibleByAllTenNumbers(_ from: Int, to: Int) -> Int? {
for counter in from...to {
if counter % 2 == 0 && counter % 3 == 0 &&
counter % 4 == 0 && counter % 5 == 0 &&
counter % 6 == 0 && counter % 7 == 0 &&
counter % 8 == 0 && counter % 9 == 0 &&
counter % 10 == 0 {
return counter
}
}
return nil
}
if let result = divisibleByAllTenNumbers(2000, to: 3000) {
print("Found result of \(result)")
} else {
print("No match found")
}
输出:
找到2520的结果