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

标签 java arrays multidimensional-array null

我有以下二维数组:

私有(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/

相关文章:

java - JSF 中的掩码 URL

java.util.List<T> t 代表什么?

java - 'java.io.IOException : parseAlgParameters failed: PBE AlgorithmParameters not available' on RHEL 8. 3 启用 FIPS 模式

c# - 在 C# 中随机化字符串

java - 将文件插入 postgres

java - 始终添加到最后一个列表项位置并保持它

c - 具有枚举类型的多维数组并将它们转换为无符号字符数组

c# - 3D 数组切片中的最小值和最大值

Java - 数组被无缘无故地改变

php - 让 PHP 解析大文件是否比从 MySQL 数据库调用数据更快?