Android 为什么数组中的某些元素会丢失?(科特林)

Android 为什么数组中的某些元素会丢失?(科特林),android,arraylist,kotlin,Android,Arraylist,Kotlin,我不明白为什么有些元素会丢失。我的假设是,我以某种方式宣布我的变量是错误的。但如果不是,我看不出代码的概念化有什么错 我试图在函数的开头创建一个数组,该数组应该在函数的结尾是相同的,但是元素仍然缺失 (例如: val savedArray=nameArray [两个数组均未修改的某些代码] nameArray=savedArray) 导入android.support.v7.app.app活动 导入android.os.Bundle 导入android.util.Log var nameArr

我不明白为什么有些元素会丢失。我的假设是,我以某种方式宣布我的变量是错误的。但如果不是,我看不出代码的概念化有什么错

我试图在函数的开头创建一个数组,该数组应该在函数的结尾是相同的,但是元素仍然缺失

(例如:

val savedArray=nameArray

[两个数组均未修改的某些代码]

nameArray=savedArray)


导入android.support.v7.app.app活动
导入android.os.Bundle
导入android.util.Log
var nameArray=arrayListOf(“朱莉娅”、“马克西姆”、“托马斯”、“迪安”、“塞缪尔”)
类MainActivity:AppCompatActivity(){
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Log.i(“Before”,“$nameArray”)/[“Julia”,“Maxime”,“Thomas”,“Dean”,“Samuel”]
val randomArray=choosePlayer()
Log.i(“之后,“$nameArray”)/[Maxime,Dean,Samuel]Thomas和Julia在哪里?
}
乐趣选择图层():ArrayList{
val endArray=arrayListOf()
var editArray=nameArray
val name1=editArray.random()
endArray.add(名称1)
editArray.remove(名称1)
val name2=editArray.random()
endArray.add(名称2)
editArray.remove(name2)
Log.i(“返回值”,“$endArray”)/[Thomas,Julia]
返回端数组
}
}
我希望nameArray已满,但始终缺少两个元素。我注意到,一旦从editArray中删除它们,它们就不见了

我希望nameArray已满,但始终有两个元素 失踪

这是因为endArray和editArray是同一个对象。这里

val endArray = arrayListOf<String>()
var editArray = nameArray

ArrayList
是可变类型。正如@Blackbelt提到的,您将
endArray
editArray
分配给了相同的值

因此,我想补充的是,建议更多“类似kotlin”的解决方案—使用不可变集合。 更容易预测代码中会发生什么

val nameArray = listOf("s1", "s2", "s3") // You cannot modify content of this list.

fun choosePlayer(): List<String> {
    return nameArray.shuffled().subList(0, 2)
}

谢谢你的回答,效果很好!创建新的ref
var editArray=arrayListOf()
之后,我添加了以下代码
editArray.addAll(nameArray)
val endArray = arrayListOf<String>()
var editArray = arrayListOf<String>()
val nameArray = listOf("s1", "s2", "s3") // You cannot modify content of this list.

fun choosePlayer(): List<String> {
    return nameArray.shuffled().subList(0, 2)
}
val list = listOf(...)

// Create a mutable copy of list. 
// Whatever you do with that list you will not modify original list.
val mutable = list.toMutableList()