0

こんにちは、私は現在マインスイーパ ゲームを作成しようとしています。GUI があり、場所に地雷があるかどうかを保存するために 2 次元配列を使用していますが、これを使用して地雷をクリックしてゲームを終了させようとすると、コード:

if (board[row][col] == 1) {
    return GameStatus.Lost; }  
else {
    return GameStatus.Continue;
 }

次のようにエラーが発生します

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 10
at Game.getGameStatus(Game.java:55)
at MineSweeperPanel$ButtonListener.actionPerformed(MineSweeperPanel.java:71)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
4

3 に答える 3

0

rowおよび で呼び出す境界を確認しますcol。たとえば、25 の行と列があり、 を参照しているboard[25][25]場合、これは配列の境界を超えています。行数の全体のサイズは 25 ですが、配列内のインデックスは から0までになり25-1ます。

于 2012-02-11T03:07:49.907 に答える
0

Array Index Out Of Bounds は、配列に (たとえば) 10 個の要素が含まれているが、11 番目の要素にアクセスしようとした (たとえば)、存在しないことを意味します。

サニティ チェック - 配列のインデックスは 0 から始まります。値は1rowからcolインデックス付けされていますか?

于 2012-02-11T03:08:10.343 に答える
0

いつ発生しますか?

長さを超えるインデックスを持つ配列にアクセスしようとすると、範囲外の例外が発生します。Java 配列の最大インデックスは (長さ -1) です。次に例を示します。

String [] stringArray = new String[10];
stringArray[10]
// the code above will produce an out of bounds exception, because the it bigger than length -1, which is 10 - 1 = 9.

配列のサイズや長さが分からない場合は、 から知ることができますstringArray.length

対処方法は?

プログラムが長さ - 1 より大きいインデックスを持つ配列にアクセスしないようにする必要があります。例:

for(int i=0;i<stringArray.lenght;i++) {
    //write your code here
}

stringArray上記のコードは、最大インデックスを超えてアクセスされないことを保証します。

あなたの場合

あなたの場合、配列の制限を定義し、定義された制限の範囲外にある配列のデータにアクセスしようとしている必要があります。

詳細については、これもお読みください...

範囲外の例外を持つ 2 次元配列の例

于 2012-02-11T03:42:53.837 に答える