我有以下2D数组:
private static Object[][] myClass = new Object[6][5];
我希望使用以下代码使数组中的最后一个元素(myClass[lastIndex][all indexes] = null
)为空:
for(int y = 0;y < 5;y++) {
myClass[5][y] = null;
}
然而,它似乎是删除数组中的最后两个元素,是什么导致了这个?
编辑:
删除之前数组打印出来:
one
1
1
1
1.0
two
2
2
2
2.0
three
3
3
3
3.0
four
4
4
4
4.0
five
5
5
5
5.0
six
6
6
6
6.0
在“删除”元素one
之后(实际上我想通过将所有元素复制到一个索引并将最后一个设置为null来“删除”元素1):
two
2
2
2
2.0
three
3
3
3
3.0
four
4
4
4
4.0
five
5
5
5
5.0
null
null
null
null
null
null
null
null
null
null
我的完整删除代码:
public void deleteStudent(int studentChoice) {
for(int i = studentChoice;i < myClass.length - 1;i++) {
myClass[i] = myClass[i+1];
}
myClassCount = myClassCount - 1;
for(int y = 0;y < 5;y++) {
myClass[5][y] = null;
}
}
int studentChoice
是数组的索引。
myClassCount
是一个在添加/删除元素时递增/递增的变量
答案 0 :(得分:1)
这是一个微妙的问题: 当你向下复制时,复制引用,而不是数组中的值,以便在最后一步,因为你不会覆盖myClass [5],myClass [5] == myClass [4],这样你就会有任何改变make myClass [5]中的任何元素都复制在myClass [4]中,因为它们是同一个对象!因此,当你使myClass [5]中的每个对象都为空时,你将使myClass [4]中的所有内容都为空。这可以通过向下复制单个值来避免,而不仅仅是数组。
您可以像这样复制值:
for(int i = studentChoice;i < myClass.length - 1;i++) {
for(int y = 0;y < 5;y ++){
myClass[i][y] = myClass[i+1][y];
}
}
作为旁注,可以通过以下方式证明此行为:
Object[] array1 = {1};
Object[] array2 = array1;
array2[0] = 2;
System.out.println(array1[0]);//Prints 2