List 随机显示列表中的对象,但在Kotlin中每个对象仅显示一次?

List 随机显示列表中的对象,但在Kotlin中每个对象仅显示一次?,list,kotlin,List,Kotlin,对不起,如果这是超基本的,我只是开始编程一般 所以我有这个列表,当用户点击一个按钮时,我设法从中随机显示一个对象 以下是执行此操作的代码: val listOfElement = listOf<String>( "test", "test2", "test 3") fun generateElement (view: View) { tvDisplay.text = listOfElement.random() } 它工作得很好,但问题是一个对象(例如test3)在遍历列

对不起,如果这是超基本的,我只是开始编程一般

所以我有这个列表,当用户点击一个按钮时,我设法从中随机显示一个对象

以下是执行此操作的代码:


val listOfElement = listOf<String>(
"test", "test2", "test 3")

fun generateElement (view: View) {

tvDisplay.text = listOfElement.random()
} 

它工作得很好,但问题是一个对象(例如test3)在遍历列表的其余部分之前可以显示两次

所以基本上我想:

每个对象只显示一次,但当所有对象都显示后,它应该随机重新开始。
再次感谢,如果这不合适,请道歉-这是我第一次使用stackoverflow

您可以复制列表并删除随机元素,然后在列表为空时重新填充列表:

val listOfElement = listOf<String>(
    "test", "test2", "test 3")

val copy = mutableListOf<String>()

fun generateElement (view: View) {
    if (copy.isEmpty()) {
        copy.addAll(listOfElement)
    }
    val random = copy.random()
    copy.remove(random)
    tvDisplay.text = random
}

非常感谢你!它工作得很好。你能解释一下为什么我需要在这里复制我的清单吗?而且,我很难掌握可变列表的概念。我一直在读关于它的文章,但在我的脑海里还没有完全明白。你想在遍历所有元素后恢复列表,因此你必须保留原始列表,以便在用尽条目后返回。可变列表允许您对其进行更新—添加、删除、排序。。。虽然列表是不可变的,但在创建后无法更改。如果将副本重命名为availableElements,这可能会更容易执行。它并不是其他列表的副本,只是在它从列表中取出第一项之前的短暂时刻。谢谢你们,这非常有用。现在一切都有意义了!您需要单独获取每个元素,还是可以一起提供它们?无论哪种方式,我都会看清单。