gpt4 book ai didi

java - 二维数组中最后一个元素为空

转载 作者:行者123 更新时间:2023-12-01 13:46:07 25 4
gpt4 key购买 nike

我有以下二维数组:

私有(private)静态对象[][] myClass = new Object[6][5];

我希望使用以下代码将数组中的最后一个元素 (myClass[lastIndex][allindexs] = null) 设为 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 来“删除”元素一):

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 是一个变量,随着元素的添加/删除而递增/递减

最佳答案

这是一个微妙的问题:当您向下复制时,将复制引用,而不是数组中的值,因此在最后一步中,因为您不会覆盖 myClass[5], myClass[5] == myClass[4] ,因此您可以进行任何更改对 myClass[5] 中的任何元素的 make 都会在 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

关于java - 二维数组中最后一个元素为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20364969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com