请看一下我的2D-Array-Initialization。代码有效。
class World(val size_x: Int = 256, val size_y: Int = 256) {
var worldTiles = Array(size_x, { Array(size_y, { WorldTile() }) })
fun generate() {
for( x in 0..size_x-1 ) {
for( y in 0..size_y-1 ) {
worldTiles[x][y] = WorldTile()
}
}
}
}
问题是它运行初始化两次。基本上我想在generate()函数中实例化WorldTile-Object。所以第3行不应该在那里调用“new WorldTile”。我怎么能这样做?
这也是通过2d阵列的正确Kotlin方式吗?
答案 0 :(得分:7)
您可以将worldTiles
设为lateinit
属性,并在generate
函数中执行所有初始化:
class World(val size_x: Int = 256, val size_y: Int = 256) {
lateinit var worldTiles: Array<Array<WorldTile>>
fun generate() {
worldTiles = Array(size_x, {
Array(size_y, {
WorldTile()
})
})
}
}
如果您在致电worldTiles
之前尝试访问generate
,则会收到异常警告,说明它尚未初始化。
答案 1 :(得分:1)
val twoDimStringArray= arrayOf(
arrayOf("first","second"),
arrayOf("foo"),
arrayOf("bar","great kotlin")
)
for (i in twoDimStringArray){
for(j in i){
println(j)
}
}
第一
第二
foo
酒吧
伟大的科特林
答案 2 :(得分:0)
要全部初始化为固定值:
// A 6x5 array of Int, all set to 0.
var m = Array(6) {Array(5) {0} }
要使用lambda进行初始化:
// a 6x5 Int array initialise i + j
var m = Array(6) { i -> Array(5) { j -> i + j } }
另一种方式:这是一个初始化2D浮点数数组(3 x 6)的示例:
var a = Array(3) { FloatArray(6)} // define an 3x6 array of float numbers
for(i:Int in 0 until a.size) {
for(j : Int in 0 until a[i].size) {
a[i][j] = 0f // initialize with your value here.
}
}