2012-03-05 30 views

回答

25

使用DOWNTO为:

for (n in 100 downTo 1) { 
// 
} 
+5

为什么不是“for(n in 100..1)”?难道这不是一个协议,如果第一个数字越大,范围倒数? – x2bool 2014-09-02 10:09:17

1

如果你看一下你链接到确切的页面,有一个reversed功能会建议让你做for (n in (1..100).reversed()),但它似乎还没有实现。 ..操作员总是加注。

+0

我看到了评论,并希望它已过时。 – jjnguy 2012-03-05 07:30:27

+0

@jjnguy嗯......也许是。提交'86a33f8'(2012年1月18日)增加了对'for(n in 100 downto 1)'和'for in(in in(1..100))'两者具有相同含义的测试。他们为你工作吗? – hobbs 2012-03-05 07:37:13

+3

- (1..100)不再有效。正确的语法是(n in 100 downTo 1) – 2012-09-28 20:25:12

6

如使用-(1..100)中的减号-一元运算符支持反向范围。

要调用该范围的方法,则需要用圆括号包围它,如(-(1..100)).foreach { println(it) }

+4

有没有可能使rangeTo()函数变得更智能并自动处理?对我有一个负范围意味着从-1到-100。 – jjnguy 2012-03-05 14:05:05

+0

我建议你看看以下与Kotlin范围有关的问题,并提交一个新问题,详细解释你的建议: [KT-861](http://youtrack.jetbrains.com/issue/KT-861) ,[KT-1045](http://youtrack.jetbrains.com/issue/KT-1045),[KT-1076](http://youtrack.jetbrains.com/issue/KT-1076) – 2012-03-05 20:19:48

2

正如指出的其他人,正确的答案是

for (n in 100 downTo 1) { 
    println(n) 
} 

但为什么科特林队选择了100 downTo 1 VS 100..1

我认为当我们尝试使用变量而不是文字时,语法100..1会很糟糕。 如果我们输入

for (n in b..a)

那就不是很清楚,我们想用什么循环。

我们可能打算向后倒数,但如果b原来小于a,那么我们的程序实际上会向上计数!这将是错误的来源。

相关问题