Вы фактически объявили пустой массив с этой строкой кода.
arrayOf<Array<Button>>()
Вам необходимо добавить некоторые элементы в этот массив. Итак, вам нужно сделать что-то вроде этого:
private var buttons = arrayOf<Array<Button>>(arrayOfNulls<Button>(3), arrayOfNulls<Button>(3), arrayOfNulls<Button>(3))
Итак, с помощью этой части мы создадим массив массивов, в котором есть 3 типа кнопок, которые могут быть обнуляемыми. Поскольку внутри массивов есть типы, допускающие значения NULL, вам нужно использовать ?
везде, где вы обращаетесь к элементам массива. Например, когда вы вызываете clickListener для одной кнопки, вам нужно сделать это следующим образом:
buttons[i][j]?.setOnClickListener
Но для вашего примера я бы не использовал массивы для хранения кнопок, но я бы использовал ArrayList, который может динамически принимать предметы. С ArrayList ваш код будет выглядеть примерно так:
Объявление массива:
private var buttons = arrayOf<ArrayList<Button>>(arrayListOf(), arrayListOf(), arrayListOf())
для циклов:
for (i in 0 until 3) {
for (j in 0 until 3) {
val buttonId = "button_$i$j"
val resId = resources.getIdentifier(buttonId, "id", packageName)
buttons[i].add(findViewById(resId))
buttons[i][j].setOnClickListener { v ->
if (player1Turn) {
(v as Button).text = "X"
} else {
(v as Button).text = "O"
}
....
}
}