- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想和Kotlin做井字游戏。
按钮二维3x3,但收到此错误消息。我不知道 Kotlin 如何准确地声明二维数组并初始化,以及如何解决这个问题……
2020-03-28 16:27:45.705 30315-30315/com.leaf76.tictactoe E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.leaf76.tictactoe, PID: 30315
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.leaf76.tictactoe/com.leaf76.tictactoe.MainActivity}: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3448)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3595)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2147)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7811)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1076)
Caused by: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
at com.leaf76.tictactoe.MainActivity.onCreate(MainActivity.kt:46)
at android.app.Activity.performCreate(Activity.java:7955)
at android.app.Activity.performCreate(Activity.java:7944)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3423)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3595)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2147)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7811)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1076)
.....
private var buttons = arrayOf<Array<Button>>()
private var player1Turn: Boolean = true
.....
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
textViewPlayer1 = text_view_p1
textViewPlayer2 = text_view_p2
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][j] = findViewById(resId) // **here got error**
buttons[i][j].setOnClickListener { v ->
if (player1Turn) {
(v as Button).text = "X"
} else {
(v as Button).text = "O"
}
....
}
}
}
}
最佳答案
您实际上已经用这一行代码声明了一个空数组。
arrayOf<Array<Button>>()
private var buttons = arrayOf<Array<Button>>(arrayOfNulls<Button>(3), arrayOfNulls<Button>(3), arrayOfNulls<Button>(3))
?
。例如,当您在单个Button上调用clickListener时,您需要这样做:
buttons[i][j]?.setOnClickListener
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"
}
....
}
}
关于android - Android Studio Kotlin二维Button数组得到java.lang.ArrayIndexOutOfBoundsException:length = 0;索引= 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60899066/
我遇到过这个 html: 上面的html和这个有什么区别: 最佳答案 来自MDN page on the tag : 对于 type 的属性标签,可能的值是: 提交:按钮将表单数据提交给服务器
Button button= (Button) findViewbyID(R.id.button); 和 Button button = new Button(this); 有什么区别? 最佳答案 有
我是一名优秀的程序员,十分优秀!