我试图从二维数组中删除一行。但我没有找到一些有用的搜索谷歌,我找到的每件事都是关于从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 ??
答案 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等。