Java 超越Android编程中的数组

Java 超越Android编程中的数组,java,android,arrays,button,Java,Android,Arrays,Button,我正在Android平台上写一个游戏。我有一组按钮,当我点击其中一个按钮时,按钮上会显示“X”,相邻的按钮如下: X X X X X 但当我单击其中一个边框按钮时,应用程序将停止 这是我负责在按钮上设置文本的方法(如果您需要更多代码,请告诉我): 这是logcat显示的: 06-06 17:13:56.727 2232-2232/pl.edu.uksw.fieldsgame E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: pl.e

我正在Android平台上写一个游戏。我有一组按钮,当我点击其中一个按钮时,按钮上会显示“X”,相邻的按钮如下:

  X
X X X
  X
但当我单击其中一个边框按钮时,应用程序将停止

这是我负责在按钮上设置文本的方法(如果您需要更多代码,请告诉我):

这是logcat显示的:

06-06 17:13:56.727    2232-2232/pl.edu.uksw.fieldsgame E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: pl.edu.uksw.fieldsgame, PID: 2232
java.lang.ArrayIndexOutOfBoundsException: length=7; index=7
        at pl.edu.uksw.fieldsgame.MainActivity.changeState(MainActivity.java:149)
        at pl.edu.uksw.fieldsgame.MainActivity.access$200(MainActivity.java:13)
        at pl.edu.uksw.fieldsgame.MainActivity$ButtonClick.onClick(MainActivity.java:137)
        at android.view.View.performClick(View.java:4780)
        at android.view.View$PerformClick.run(View.java:19866)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5257)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

ArrayIndexOutOfBoundsException
表示您试图读取数组中不存在的索引,在这种情况下,您有一个长度为7的数组(索引0到6),但您要求的是位置7,该位置不存在

我没有足够的数据将行号与代码对齐,但我猜这是来自这一行:

String rightButtonText = BoardButtons[locationVer+1][locationHor].getText().toString();
在尝试从数组中读取
locationVer+1
之前,不必进行检查以确保它是有效的数组索引。看起来您的以下代码将处理
rightbuttonext
null
,因此这应该可以工作(对每次读取的数组重复,根据需要更改递增/递减的数组索引的条件):


知道它是在哪条线上撞车是很有用的。当您提到诸如
“应用程序正在停止”
之类的内容时,请包含完整的堆栈跟踪。另外,请参阅(可能与您的问题无关,但这是一个明显的问题)。不,这不是因为比较字符串。我认为像“if(locationVer==0)”这样的行不起作用。我将编辑我的问题并显示Logcatt错误应该给您一个提示;)Java中数组的索引从0到length-1,因此数组[length]实际上超出了1的范围。很可能您正在传递一个值
6
,作为函数的参数之一-您要做的第一件事是
locationVer+1
,这将导致异常。预先检查locationVer和locationHor的界限可能会大大有助于解决问题。此外,请研究
=
equals
之间的差异。我意识到这不是你当前问题的根源,但你在那里编写的代码是错误的(真的是自找麻烦)。好吧,几乎是正确的。我可以单击边框按钮,但当我单击任何按钮时,它只会在中间(单击)、下方和右侧按钮上设置“X”。如何解决这个问题?现在您终于遇到了使用
=
vs`.equals()的问题。为了格式化,我将把它编辑到我的答案中。不,它没有解决这个新问题。它又只设置了3“X”。好吧,我终于发现了错误!我用if(locationHor-1>=BoardButtons.length)代替if(locationHor-1>=0)。。。
String rightButtonText = BoardButtons[locationVer+1][locationHor].getText().toString();
String rightButtonText = null;
if (locationVer + 1 < BoardButtons.length) {
    rightButtonText = BoardButtons[locationVer+1][locationHor].getText().toString();
}
if (String.valueOf(Game.PLAYER).equals(buttonText))