Java 从二维数组中删除行

Java 从二维数组中删除行,java,arrays,Java,Arrays,我试图从二维数组中删除一行。但我在谷歌搜索时没有找到有用的东西,我找到的每一件东西都是关于从ArrayList中删除的 这是我的二维数组: int[][] Dirt = {{4, 2}, {0, 5}, {7, 1}, {3, 3}}; 例如,我想删除{0,5} 在这里,它必须清除污垢的行 for (int z = 0; z < 3; z++) { if(pos[0]==Dirt[z][0]&& pos[1]==Dirt[z][1]){ Syste

我试图从二维数组中删除一行。但我在谷歌搜索时没有找到有用的东西,我找到的每一件东西都是关于从
ArrayList
中删除的

这是我的二维数组:

int[][] Dirt = {{4, 2}, {0, 5}, {7, 1}, {3, 3}};
例如,我想删除{0,5} 在这里,它必须清除污垢的行

for (int z = 0; z < 3; z++) {
    if(pos[0]==Dirt[z][0]&& pos[1]==Dirt[z][1]){
        System.out.println("Dirt[z][0]"+Dirt[z][0] +"Dirt[z][1]"+Dirt[z][1]);
        //here it must remove the row from the Dirt 
    }
}
for(intz=0;z<3;z++){
如果(位置[0]==污垢[z][0]&位置[1]==污垢[z][1]){
System.out.println(“污垢[z][0]”+污垢[z][0]+“污垢[z][1]”+污垢[z][1]);
//在这里,它必须清除污垢中的行
}
}
有什么建议吗


我试着把arryay换成新的,但也没用

这是输出:

线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常:3[][ ][ ][ ][ ][ ][ ][ ][ ] [ ][ ][ ][ ][ ][ ][ ][ ] [ ][ ][ ][ ][ ][ ][ ][ ] [ ][ ][ ][ ][ ][ ][ ][ ] [ ][ ][ ][ ][ ][ ][ ][ ] [ ][ ][ ][ ][ ][ ][][]

在test.Move(test.java:121)中选择taste equal5:4 5:4 nowX和nowY 在test.main(test.java:149)中,java结果:1构建成功(总计 时间:3秒)

这是我的代码:

int[][] Dirt = {{4, 2}, {0, 5}, {7, 1}, {3, 3}};
int[][] temp = Dirt;
int size = Dirt.length - 1;


public void Move() {
    Collections.shuffle(orientation);
    int nowX = 4, nowY = 4;           
    int counter = 0;
    int strightCounter = 1;
    Dirt = new int[size][2];
    int newIndex = 0;
    int x = 0;
    int y = 0;
    while (!(Dirt.length == 0)) {


        for (int i = 0; i < 3; i++) {
            choices.add(orientation.get(i));

            board[nowX][nowY] = "1";
            int[] pos = gostright(nowX, nowY);
            nowX = pos[0];
            nowY = pos[1];
            System.out.println("" + nowX + ":" + nowY);
            System.out.println("nowX and nowY" + board[nowX][nowY]);
            board[nowX][nowY] = "#";
            moves++;
            for (int z = 0; z < temp.length; z++) {
                int[] oneDimension = temp[z];
                if (pos[0] == oneDimension[0] && pos[1] == oneDimension[1]) {
                             continue;
                }else{           
                    Dirt[newIndex][0] = oneDimension[0];
                    Dirt[newIndex][1] = oneDimension[1];
                    newIndex++;
                }
            }
            System.out.println("The array After removing : ");
            for (int s = 0; s < Dirt.length; s++) {
                System.out.println(Dirt[s][0] + "," + Dirt[s][1]);
            }

            System.out.println(toString());
            System.out.println(orientation.get(i));
            System.out.println("Choices " + choices);
            System.out.println("# move" + moves);
            if (Wall(nowX, nowY)) {
                break;
            }
        }

        counter++;

    }
}


any suggestion ??
int[]Dirt={{4,2},{0,5},{7,1},{3,3};
int[][]温度=污垢;
int size=污垢。长度-1;
公开作废动议(){
收藏。洗牌(定向);
int nowX=4,nowY=4;
int计数器=0;
int strightCounter=1;
污垢=新整型[尺寸][2];
int newIndex=0;
int x=0;
int y=0;
而(!(Dirt.length==0)){
对于(int i=0;i<3;i++){
选择。添加(定向。获取(i));
董事会[nowX][nowY]=“1”;
int[]pos=gostright(nowX,nowY);
nowX=pos[0];
nowY=pos[1];
System.out.println(“+nowX+”:“+nowY”);
System.out.println(“nowX和nowY”+板[nowX][nowY]);
董事会[nowX][nowY]=“#”;
移动++;
对于(intz=0;z
Java数组是不可变的对象

要删除或添加项,必须重新生成数组对象。如果灵活地添加和删除项目,我还建议使用集合对象,如ArrayList、HashMap等。

您正在尝试实现一些不可能实现的目标

数组是固定的,因此一旦创建,就不能修改其大小


您可以通过动态地创建一个少一行的新数组来创建删除行的效果。

在Java中,数组的大小是静态的,这意味着您不能在创建数组后更改数组的大小。这就是您只找到与ArrayList相关的答案的原因。

由于您无法更改数组的大小,因此如果您创建另一个数组并仅插入所需的元素,可能会更好。

您必须用新数组替换该数组。这里有4行代码可以实现这一点:

// original array
int[][] dirt = { { 4, 2 }, { 0, 5 }, { 7, 1 }, { 3, 3 } };
int z = 1; // the element to remove

// create a new smaller array
int[][] dirt2 = new int[dirt.length - 1][];
// copy everything from 0 to z
System.arraycopy(dirt, 0, dirt2, 0, z);
// copy from z+1 to end
System.arraycopy(dirt, z + 1, dirt2, z, dirt.length - z - 1);
// reassign
dirt = dirt2;

要完成此功能,可以创建一个size=size-1的新数组,然后将相关值(减去删除的行)复制到新数组中。然后重新分配旧数组以引用新数组。这个大小和类型是固定的,但是内容是完全可变的。如果你想要更大的灵活性,当然要同意你关于使用其他系列的建议:-)谢谢mikera。我上过弦乐课。当然,数组的内容是完全可变的,但字符串不是。^^。我尝试了这个:但也给出了一个错误:我尝试了这个,但没有成功,给出了这个错误:线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常:3@ElfagerElbeaeed代码非常完美-我使用所有有效值(在本例中,范围为0到3,包括0到3)对其进行了测试,并按预期工作。只有使用数组外部的
z
值才能获得该异常-在本例中,数组有4个元素,因此
z
的最大有效值为
3
,因此如果使用
4
(或更大),您将得到该错误。检查此代码的使用情况。