所以我知道我错过了一些显而易见的东西,但是,在搜索了类似的/相关的问题之后,我不知道我做错了什么。
科特林是新来的,所以可能是我不太明白的。
创建一个ArrayList,因为我需要一个越来越多的项目列表,从零开始。把它想象成一个撤销列表。它会长到一个未知的大小。在某个时候,我会在需要的时候把它重新设置为“空”。
在这个列表中,我需要一个整数数组。这3个值是一个协调系统-如果它重要(即x,y,z)。
无论我尝试什么,我都只能检索最后添加的IntArray集。
使用:https://developer.android.com/training/kotlinplayground
fun main() {
// array list
var myList = arrayListOf<IntArray>()
// 3 item "test" array to populate array list with
var myArr = IntArray(3){0}
// setup Array list with 3 items
for ( b in 0..2 ) {
// fake/create a temp array with some simple values
for ( i in 0..2 ) { myArr[i] = 3+b+(3*i) }
// add it to the List
myList.add(b, myArr)
// confirm values
println ( "Added [" + myList.lastIndex +"] = " + myArr[0] +"-"+ myArr[1] +"-"+ myArr[2] )
}
// confirm size of Array List
println ( "size: " + myList.size )
// test pull the middle array from the ArrayList
// indices should be: 0, 1 and 2
var testArr = myList.get(1)
println ( "for idx 1: vals: " + testArr[0] +"-"+ testArr[1] +"-"+ testArr[2])
// test display all values for all arrays
myList.forEach {
println ( "Vals: " + it[0] +"-"+ it[1] +"-"+ it[2] )
}
// another method to do same ?
for ((index,value) in myList.withIndex()) {
println("index: $index ... " + value[0] +"-"+ value[1] +"-"+ value[2])
}
}产出如下:
Added [0] = 3-6-9
Added [1] = 4-7-10
Added [2] = 5-8-11
size: 3
for idx 1: vals: 5-8-11
Vals: 5-8-11
Vals: 5-8-11
Vals: 5-8-11
index: 0 ... 5-8-11
index: 1 ... 5-8-11
index: 2 ... 5-8-11一切都是完美的,直到"5-8-11“的重复.我做错什么了?
发布于 2022-03-30 07:36:46
问题是:
for ( i in 0..2 ) { myArr[i] = 3+b+(3*i) }
您总是修改和添加相同的对象:myArr。
若要修复、替换
for ( i in 0..2 ) { myArr[i] = 3+b+(3*i) }
使用
val a = IntArray(3) { i -> 3+b+(3*i) }
然后添加a
myList.add(a)
或者,如果填充IntArray和示例中的示例一样简单,只需:
myList.add(IntArray(3) { i -> 3+b+(3*i) })
最终代码如下所示:
fun main() {
val myList = arrayListOf<IntArray>()
// setup Array list with 3 items
for ( b in 0..2 ) {
myList.add(IntArray(3) { i -> 3+b+(3*i) })
}
for ((index,value) in myList.withIndex()) {
println("index: $index ... " + value[0] +"-"+ value[1] +"-"+ value[2])
}
}或者更简洁(可能太多了):
fun main() {
val myList = List(3) { b -> IntArray(3) { i -> 3 + b + (3 * i) } }
for ((index, value) in myList.withIndex()) {
println("index: $index ... " + value[0] + "-" + value[1] + "-" + value[2])
}
}发布于 2022-03-30 01:58:19
我读过您的代码,我认为问题在于您使用的IntArray,它是一个对象,每次将它添加到列表中时,它都是同一个对象。因此,最终,它总是相同的元素。请将代码更改为:
...
for ( b in 0..2 ) {
// fake/create a temp array with some simple values
var myArr = IntArray(3){0}
for ( i in 0..2 ) { myArr[i] = 3+b+(3*i) }
// add it to the List
myList.add(b, myArr)
// confirm values
println ( "Added [" + myList.lastIndex +"] = " + myArr[0] +"-"+ myArr[1] +"-"+ myArr[2] )
}
...这应该能解决你的问题。
下面是对引用对象的解释
在处理对象时,理解引用是很重要的。引用是一个地址,它指示存储对象的变量和方法的位置。在将对象赋值给变量或将对象传递给方法作为参数时,不使用对象。您甚至没有使用对象的副本。相反,您使用的是对这些对象的引用。
这是关于kotlin的描述,它通过图片和内容来解释,你可以读到这个。
发布于 2022-03-30 06:57:52
创建一个ArrayList,因为我需要一个越来越多的项目列表,从零开始。把它想象成一个撤销列表。它会长到一个未知的大小。在某个时候,我会在需要的时候把它重新设置为“空”。
听起来你需要一堆东西。您可以为此使用一个MutableList,或者使用ArrayDeque类。使用size、addLast(元素)、clear、clear(元素)、isEmpty()、clear()和removeLast(),您已经掌握了处理类似撤消列表之类的操作的所有内容。
要构建它,您可以这样做:
val stack = ArrayDeque<IntArray>()
for (b in 0..2) {
val intArray = IntArray(3)
for (i in 0..2) {
intArray[i] = 3 + b + (3 * i)
}
stack.addLast(intArray)
}
stack.forEach { println(it.joinToString("-")) }输出:
3-6-9
4-7-10
5-8-11https://stackoverflow.com/questions/71670394
复制相似问题