我在迭代布尔数组时遇到一些麻烦。问题是我有四个位置可以激活我的if条件,但只能检测到一个。我认为这是因为我以一种不好的方式进行遍历。有我的代码,因此您可以了解我的问题:
数组声明:
var columns = BooleanArray(Constants.WIDTH){ false }
var lines = BooleanArray(Constants.HEIGHT){false}
在这里,我只检查位置是否应该启用真实状态,如您所见,我正在深入矩阵中进行迭代:
fun addNewIPiece(positionX:Int,positionY:Int){
val matrixPositionX = positionX/Constants.WIDTH_BLOCK
val matrixPositionY = positionY/Constants.HEIGHT_BLOCK
columns[matrixPositionX] = true
for(i in 0..4){
lines[matrixPositionY+i] = true
}
}
在这里我要遍历列和行并绘制一些块,但是在某种程度上,我只有一个巧合(请检查代码下方):
fun drawMap(monoBlock: MonoBlock,canvas: Canvas){
for(columnsList in columns ){
for (linesList in lines){
if (columnsList and linesList) {
Log.d("CoincidenceX",columns.indexOf(columnsList).toString())
Log.d("CoincidenceY",lines.indexOf(linesList).toString()) monoBlock.draw(canvas,columns.indexOf(columnsList),lines.indexOf(linesList))
}
}
}
}
这是调试:
D/CoincidenceY: 87
D/CoincidenceX: 20
D/CoincidenceY: 87
D/CoincidenceX: 20
D/CoincidenceY: 87 ...........
因此任何人都可以弄清楚我的错误来自何处?我认为这是我进行迭代的方式,但是我不确定。
请先谢谢您的询问。
答案 0 :(得分:3)
变量columnsList
和linesList
的数据类型(完全不合适的名称)是Boolean
,它是primitive数据类型,它们的值是true
或false
。
因此,当您使用indexOf()
时,它将返回与columnsList
或linesList
的值匹配的第一项的索引,而不是您正在迭代的项目。
由于您对索引感兴趣,因此请使用索引循环:
for (i in columns.indices) {
for (j in lines.indices) {
if (columns[i] && lines[j]) {
Log.d("CoincidenceX", i.toString())
Log.d("CoincidenceY", j.toString())
}
}
}