Kotlin 数组中的所有项始终包含最后一项
All items in a Kotlin array always contain the last item
我正在尝试用原始文件夹中的文件填充数组。然后我在该数组中选择一个随机插槽并用它来播放该文件。
但是当我这样做时,每个插槽似乎都包含数组中的最终视频。我不确定这是什么原因...
var videos = Array(5){R.raw.c0; R.raw.c1; R.raw.c2; R.raw.c3; R.raw.c4};
videoView.setVideoPath("android.resource://" + getPackageName() + "/" + videos[Random.nextInt(0, 4)])
videoView.requestFocus()
videoView.start()
您对数组的初始化不正确。
Array(5)
之后的 {...}
块实际上是一个 lambda,它接受一个整数和 returns 数组中该索引的内容。分号(而不是逗号)意味着 R.raw.c0
、R.raw.c1
等中的每一个都只是一个不执行任何操作的语句。由于 R.raw.c4
是该块中的最后一条语句,它将所有五个索引设置为该值。
你的意思可能是:
val videos = intArrayOf(R.raw.c0, R.raw.c1, R.raw.c2, R.raw.c3, R.raw.c4)
注意用逗号替换分号。我还将 var
切换为 val
,因为您似乎没有更改它。
您应该执行以下操作之一才能正确创建您的数组。
var videos = intArrayOf(R.raw.c0, R.raw.c1, R.raw.c2, R.raw.c3, R.raw.c4)
或
var videos = arrayOf(R.raw.c0, R.raw.c1, R.raw.c2, R.raw.c3, R.raw.c4)
请尝试一下,这应该可以解决您的问题。
我正在尝试用原始文件夹中的文件填充数组。然后我在该数组中选择一个随机插槽并用它来播放该文件。
但是当我这样做时,每个插槽似乎都包含数组中的最终视频。我不确定这是什么原因...
var videos = Array(5){R.raw.c0; R.raw.c1; R.raw.c2; R.raw.c3; R.raw.c4};
videoView.setVideoPath("android.resource://" + getPackageName() + "/" + videos[Random.nextInt(0, 4)])
videoView.requestFocus()
videoView.start()
您对数组的初始化不正确。
Array(5)
之后的 {...}
块实际上是一个 lambda,它接受一个整数和 returns 数组中该索引的内容。分号(而不是逗号)意味着 R.raw.c0
、R.raw.c1
等中的每一个都只是一个不执行任何操作的语句。由于 R.raw.c4
是该块中的最后一条语句,它将所有五个索引设置为该值。
你的意思可能是:
val videos = intArrayOf(R.raw.c0, R.raw.c1, R.raw.c2, R.raw.c3, R.raw.c4)
注意用逗号替换分号。我还将 var
切换为 val
,因为您似乎没有更改它。
您应该执行以下操作之一才能正确创建您的数组。
var videos = intArrayOf(R.raw.c0, R.raw.c1, R.raw.c2, R.raw.c3, R.raw.c4)
或
var videos = arrayOf(R.raw.c0, R.raw.c1, R.raw.c2, R.raw.c3, R.raw.c4)
请尝试一下,这应该可以解决您的问题。