Android 应用在调用方法时崩溃。该方法运行一些 if 语句并更改某些图像视图上的可绘制对象

Android app crashing on call of a method. The method runs some if statements and changes the drawables on some imageviews

我正在创建 class 以在 android 应用程序中使用。它应该跟踪 "tiles" 的网格,它可以改变颜色。但是当调用我创建的 "checkTile" 方法时它一直崩溃。该方法只是通过一些 if 语句来查看是否有任何周围的图块是 "blank",然后在任何空白图块上调用 "switchTile" 命令,这会交换两个图像视图的可绘制对象。

logcat 说: 3474-3474/? E/VCD: init_modem : 无法打开 /dev/umts_atc0, errno = 2

这里是 class:


import android.graphics.drawable.Drawable;

import java.util.ArrayList;
import java.util.Random;

public class TileBoard {
    private Drawable[][] tiles;
    private Drawable blank;

    public TileBoard(int width, int height, Drawable blank) {
        tiles = new Drawable[width][height];
        this.blank = blank;
    }

    public void switchTiles(int tile1X, int tile1Y, int tile2X, int tile2Y) {
        Drawable placeholder = tiles[tile1X][tile1Y];
        tiles[tile1X][tile1Y] = tiles[tile2X][tile2Y];
        tiles[tile2X][tile2Y] = placeholder;
    }

    public void checkTile(int tileX, int tileY) {
        if (tileX != 0) if (tiles[tileX - 1][tileY].equals(blank))
            switchTiles(tileX, tileY, tileX - 1, tileY);
        if (tileY != 0) if (tiles[tileX][tileY - 1].equals(blank))
            switchTiles(tileX, tileY, tileX, tileY - 1);
        if (tileX != tiles[0].length) if (tiles[tileX + 1][tileY].equals(blank))
            switchTiles(tileX, tileY, tileX + 1, tileY);
        if (tileY != tiles.length) if (tiles[tileX][tileY + 1].equals(blank))
            switchTiles(tileX, tileY, tileX, tileY + 1);
    }

    public void scrambleBoard() {
        Random rand = new Random();
        for (int i = 0; i < tiles[0].length; i++) {
            for (int j = 0; j < tiles.length; j++) {
                int randomPositionX = rand.nextInt(tiles[0].length);
                int randomPositionY = rand.nextInt(tiles.length);
                switchTiles(i, j, randomPositionX, randomPositionY);
            }
        }
    }

    public void setBoard(ArrayList<Drawable> images) {
        for (int i = 0; i < tiles.length * 5; i += 5) {
            for (int j = 0; j < tiles[0].length; j++) {
                tiles[j][i / 5] = images.get(i + j);
            }
        }
    }
}

问题已解决。有两件事是错误的。首先,在 checkTile 中的一些 if 语句中需要有条件 tileY != tiles.length - 1 而不是 tileY != tiles.length。缺少 -1 导致 ArrayIndexOutOfBoundsException。其次,我试图将可绘制对象与 .equals 命令进行比较,这显然不适用于可绘制对象。

感谢@Md。 Asaduzzaman,他指出 ArrayIndexOutOfBoundsException