kotlin 为什么我需要for循环来得到这个数组列表的所有元素,为什么我不能像in循环那样使用Intrange的Int range?

zengzsys  于 2023-03-13  发布在  Kotlin
关注(0)|答案(2)|浏览(173)

我想打印所有的枪,我已经使用'gunIndex'变量索引。我可以使用循环,但为什么我不能这样做没有一个循环?当使用循环,为什么我可以打印IntRange,尽管它不是Int类型?gun[gunIndex]这是错误:
类型不匹配:推断类型为IntRange,但应为Int

fun main(args: Array<String>) {
    var gun = arrayListOf<String>("ak47", "m249 SAW", "Dessert Eagle")
    gun.add("AKM")
    gun.add("AK74")
    var nomerGun = 0

    var gunIndex = 0..gun.size-1

        println(gun[gunIndex])
}

为什么当使用for循环时,我没有得到这个错误?
类型不匹配:推断类型为IntRange,但应为Int
当我打印出来的时候?
我已经花了几个小时询问ChatGPT,但我仍然不明白为什么没有循环就做不到,以及为什么尽管[gunIndex]操作符填充了IntRange,但for循环可以打印gun[gunIndex]

ajsxfq5m

ajsxfq5m1#

这声明gunIndexIntRange类型(即,整数列表):

var gunIndex = 0..gun.size-1

对数组进行索引需要Int来指示要在哪个特定索引处检索值。尝试使用值范围对数组进行索引没有逻辑意义,因此出现错误。

println(gun[gunIndex]) // which one of the "gun" items is supposed to be printed if gunIndex is the range of all of them?

当使用for循环时,为什么我可以打印IntRange,尽管它不是Int类型?
您没有显示代码,因此我不得不假设您误解了。您可能有如下内容:

for (gunIndex in 0..gun.size-1) {
    println(gun[gunIndex])
}

这使得gunIndex对于循环的每次迭代都是Int,可用于索引数组。

olmpazwi

olmpazwi2#

如果你想对一个集合的所有元素做一些事情,你必须做一些循环,可以是经典的for/foreach循环,迭代器和while循环,等等。
你的for循环是什么样子的?
如果要在简单的oneliner中打印所有项目,请使用用途:

gun.forEach { println(it) }

相关问题