在swift中循环使用奇数

Sla*_*dev 2 swift

我正在努力解决这个问题

使用标准的for-in循环将所有小于或等于100的奇数加到oddNumbers数组中

我尝试了以下方法:

var oddNumbers = [Int]()
var numbt = 0
for newNumt in 0..<100 {
    var newNumt = numbt + 1; numbt += 2; oddNumbers.append(newNumt)
}

print(oddNumbers)
Run Code Online (Sandbox Code Playgroud)

这导致:

1,3,5,7,9,... 199

我的问题是:虽然我指定0到<100之间的范围,为什么打印数字大于100?

Nic*_*chi 8

你犯了一个错误:

for newNumt in 0..<100 {
    var newNumt = numbt + 1; numbt += 2; oddNumbers.append(newNumt)
}
Run Code Online (Sandbox Code Playgroud)

变量newNumt定义的内部循环不影响变量newNumt的声明for语句.因此for循环打印出前100个奇数,而不是0到100之间奇数.

如果你需要使用for循环:

var odds = [Int]()
for number in 0...100 where number % 2 == 1 {
    odds.append(number)   
}
Run Code Online (Sandbox Code Playgroud)

或者:

let odds = (0...100).filter { $0 % 2 == 1 }
Run Code Online (Sandbox Code Playgroud)

将使用0到100之间的项过滤数组中的奇数.为了更好的实现,请使用stride运算符:

let odds = Array(stride(from: 1, to: 100, by: 2))
Run Code Online (Sandbox Code Playgroud)

  • 我会避免你展示的技术,转而使用步幅.制作N个数字的列表是没有意义的,只能丢弃其中的一半 (2认同)