Scala中如何实现反向循环遍历?现有代码无输出求助
解决Scala反向循环无输出的问题
嘿,我一眼就瞅出问题啦!你当前用的20 to i是Scala里的递增区间语法——只有当起始值小于等于结束值时,这个区间才会包含元素。如果你的输入i是比20小的数(比如你想输出到18的话i=18),那这个区间其实是空的,自然就没有任何打印输出咯。
给你几种简单有效的解决方案:
方法1:用downto(最推荐,直观易懂)
Scala专门提供了downto语法来实现递减遍历,它会从左侧数值开始,一直递减到右侧数值(包含两端):
def iterateForLoop(i: Int): Unit = { for(start <- 20 downto i) { println(start) } }
比如调用iterateForLoop(18),就会输出20 19 18,完全符合你的需求。
方法2:用to配合负步长by -1
如果你偏好使用to,可以通过指定步长为-1来实现反向遍历,不过要注意起始值要大于结束值:
def iterateForLoop(i: Int): Unit = { for(start <- 20 to i by -1) { println(start) } }
这种写法和方法1效果一致,但可读性稍弱一些。
方法3:先生成递增区间再反转
另一种思路是先创建从i到20的递增序列,再反转成递减顺序:
def iterateForLoop(i: Int): Unit = { for(start <- (i to 20).reverse) { println(start) } }
这种方式也能达到目标,适合喜欢函数式风格写法的同学。
最后提个小提醒:要确保传入的i值小于等于20哦,如果i比20大,不管哪种方法都不会有输出(毕竟你要的是从20递减到i,i更大的话没有符合条件的元素)。
内容的提问来源于stack exchange,提问作者Navin Gelot
相关产品推荐
相关产品推荐

