Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android应用程序在方法调用时崩溃。该方法运行一些if语句,并更改某些ImageView上的可绘图项_Java_Android_Android Drawable - Fatal编程技术网

Java Android应用程序在方法调用时崩溃。该方法运行一些if语句,并更改某些ImageView上的可绘图项

Java Android应用程序在方法调用时崩溃。该方法运行一些if语句,并更改某些ImageView上的可绘图项,java,android,android-drawable,Java,Android,Android Drawable,我正在创建一个用于android应用程序的类。它应该跟踪一个网格的“瓷砖”,它可以改变颜色。但是当调用我创建的“checkTile”方法时,它一直崩溃。该方法只需运行一些if语句,查看周围的平铺是否为“空白”,然后对任何空白平铺调用“switchTile”命令,这将交换两个imageview的可绘制内容 日志说: 3474-3474/? E/VCD:init_调制解调器:无法打开/dev/umts_atc0,错误号=2 下面是课堂: import android.graphics.drawab

我正在创建一个用于android应用程序的类。它应该跟踪一个网格的“瓷砖”,它可以改变颜色。但是当调用我创建的“checkTile”方法时,它一直崩溃。该方法只需运行一些if语句,查看周围的平铺是否为“空白”,然后对任何空白平铺调用“switchTile”命令,这将交换两个imageview的可绘制内容

日志说: 3474-3474/? E/VCD:init_调制解调器:无法打开/dev/umts_atc0,错误号=2

下面是课堂:


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);
            }
        }
    }
}

导入android.graphics.drawable.drawable;
导入java.util.ArrayList;
导入java.util.Random;
公共级瓦楞纸板{
私人可拉伸[]瓷砖;
专用可拉延毛坯;
公共瓷砖板(内部宽度、内部高度、可拉伸空白){
瓷砖=新的可拉伸[宽度][高度];
this.blank=空白;
}
公共无效开关磁砖(int-tile1X、int-tile1Y、int-tile2X、int-tile2Y){
可绘制占位符=瓷砖[tile1X][tile1Y];
瓷砖[tile1X][tile1Y]=瓷砖[tile2X][tile2Y];
tiles[tile2X][tile2Y]=占位符;
}
公共无效检查磁贴(int-tileX,int-tileY){
if(tileX!=0)if(tiles[tileX-1][tileY].equals(空白))
开关瓷砖(tileX、tileY、tileX-1、tileY);
if(tileY!=0)if(tiles[tileX][tileY-1]。等于(空白))
开关磁砖(tileX、tileY、tileX、tileY-1);
if(tileX!=tiles[0]。长度)if(tiles[tileX+1][tileY]。等于(空白))
开关磁砖(tileX、tileY、tileX+1、tileY);
if(tileY!=tiles.length)if(tiles[tileX][tileY+1]。等于(空白))
开关磁砖(tileX、tileY、tileX、tileY+1);
}
公共教育委员会(){
Random rand=新的Random();
对于(int i=0;i
问题已经解决。有两件事不对。首先,在checkTile中的一些if语句中,需要有条件
tileY!=tiles.length-1
而不是
tileY!=瓷砖。长度
。缺少-1导致出现
ArrayIndexOutOfBoundsException
。第二,我试图将drawables与
.equals
命令进行比较,这显然不适用于drawables


感谢@Md.Asaduzzaman,他指出了
ArrayIndexOutOfBoundsException

你能发布坠机的Logcat报告吗?可能是
ArrayIndexOutOfBoundsException
通过查看Logcat很容易识别错误。我添加了出现在redThank you@Md.Asaduzzaman中的Logcat部分。这是一个ArrayIndexOutOfBoundsException,现在该方法根本不起任何作用。这是一个改进,但应用程序仍然无法工作。