从二维数组中删除行

时间:2011-12-01 23:47:56

标签: 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]){
        System.out.println("Dirt[z][0]"+Dirt[z][0] +"Dirt[z][1]"+Dirt[z][1]);
        //here it must remove the row from the Dirt 
    }
}

有什么建议吗?


我试图将arryay复制到新的,但也没有工作

这是输出:

  
    

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

  
     

choise taste equal5:4 5:4 nowX and nowY at test.Move(test.java:121)     at test.main(test.java:149)Java结果:1 BUILD SUCCESSFUL(总计   时间: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 ??

5 个答案:

答案 0 :(得分:2)

在Java中,数组的大小是静态的,这意味着一旦创建了数组,就无法更改数组的大小。这就是您只找到与ArrayLists相关的答案的原因。

答案 1 :(得分:1)

由于你无法改变数组的大小,或许如果你创建另一个数组并且只插入你需要的元素会更好

答案 2 :(得分:0)

你正在努力实现一些不可能实现的目标。

阵列是固定的,因此一旦创建就无法修改它们的大小。

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

答案 3 :(得分:0)

您必须使用新的替换数组。这里有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;

答案 4 :(得分:-1)

Java数组是不可变对象。
要删除或添加项目,必须重新生成数组对象。如果灵活地添加和删除项目,我还建议使用CollectionList,如ArrayList,HashMap等。