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
(或更大),您将得到该错误。检查此代码的使用情况。