Kotlin 数组中的所有项始终包含最后一项

Posted

技术标签:

【中文标题】Kotlin 数组中的所有项始终包含最后一项【英文标题】:All items in a Kotlin array always contain the last item 【发布时间】:2020-05-26 23:07:06 【问题描述】:

我正在尝试用原始文件夹中的文件填充数组。然后我在该数组中选择一个随机插槽并使用它来播放该文件。

但是当我这样做时,每个插槽似乎都包含数组中的最终视频。我不确定这是什么原因......

    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()

【问题讨论】:

【参考方案1】:

您正在错误地初始化数组。

Array(5) 之后的 ... 块实际上是一个 lambda,它接受一个整数并返回数组中该索引的内容。分号(而不是逗号)意味着R.raw.c0R.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,因为您似乎没有更改它。

【讨论】:

【参考方案2】:

您应该执行以下操作之一以正确创建您的数组。

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)

请尝试一下,这应该可以解决您的问题。

【讨论】:

为什么你认为这比 Ryan M 的旧答案更好? 它展示了在 Kotlin 中正确创建数组以解决问题的两种方法。

以上是关于Kotlin 数组中的所有项始终包含最后一项的主要内容,如果未能解决你的问题,请参考以下文章

如何检查数组的至少一项是不是包含在对象数组中并遍历所有对象(JS)

Xpath 选择项目(最后一项除外)包含语法

测试字符串是不是包含字符串数组中的任何内容(kotlin)

json对象推送使用循环中的最后一项覆盖所有项目?

在 Postgres 9.4 中查找 JSON 数组中的最后一项

从数组中删除最后一项(而不是返回项)