按索引设置2D数组中的值(Kotlin)

chhkpiq4  于 2023-03-03  发布在  Kotlin
关注(0)|答案(2)|浏览(119)

我将二维数组定义如下

var row = 4
var col = 4
val myArray = Array(row) { IntArray(col) }

fun fillArray(myArray: Array<IntArray>) {
    myArray.forEach {
        it.forEach {
            var random = (1..4).random()
            myArray.set(i, random)
            Log.i(TAG, random.toString())
        }
    }
}

我有两个问题

myArray.set(i, random)

**第一:**如何获得二维数组元素的当前索引“i”
**第二:**函数不接受随机生成的数字“random”。IDE说需要IntArray类型。我知道我生成了一个int类型的数组,但我想设置一个int类型的值,而不是IntArray类型的值,所以我不太明白我应该做什么。

如果我这样直接按索引访问值

numbers[0][0] = 3

一切都很好。但是如果我像上面显示的那样迭代它,我就不能为每个索引设置一个值。

soat7uwm

soat7uwm1#

既然你已经知道numbers[0][0] = 3的语法,就使用它吧。循环应该经过myArrayindices和每个内部数组的indices

for (outerIndex in myArray.indices) {
    for (innerIndex in myArray[outerIndex].indices) {
        myArray[outerIndex][innerIndex] = (1..4).random()
    }
}

或者,如果您更喜欢forEach

myArray.indices.forEach { outerIndex ->
    myArray[outerIndex].indices.forEach { innerIndex ->
        myArray[outerIndex][innerIndex] = (1..4).random()
    }
}

注意不要在数组上使用forEach,这会覆盖数组的 elements,但是数组的原始元素对你没有任何用处,因为这样做的目的是用随机值填充数组。
实际上,你也可以用随机值初始化数组,如下所示:

val myArray = Array(row) { 
    IntArray(col) { (1..4).random() } 
}
sulc1iza

sulc1iza2#

myArray.set(i, random)

这个调用不起作用的原因很明显,myArray的类型是Array<IntArray>(所以它有点像Array<Array<Int>>),所以,当期望IntArray时,不能设置Integer
要修复它(我使用命名参数使它更清楚),您需要使用forEachIndexed

fun fillArray(myArray: Array<IntArray>) {
    myArray.forEach { outerArray ->
        outerArray.forEachIndexed { innerIndex, _ ->
            val random = (1..4).random()
            
            outerArray.set(innerIndex, random) // we should use different syntax ("Should be replaced with indexing")
            outerArray[innerIndex] = random // this is proper syntax
        }
    }
}

相关问题