【问题标题】:null last element in 2D array二维数组中的最后一个元素为空
【发布时间】:2013-12-04 01:12:32
【问题描述】:

我有以下二维数组:

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之后(实际上我想通过将所有元素复制到一个索引下并将最后一个设置为空来“删除”第一个元素):

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

【问题讨论】:

  • 应该可以正常工作...您如何验证它确实删除了最后两个元素?
  • 我手动打印出数组以及使用 intellij Idea 中的调试功能
  • 那么问题不在于这段代码。
  • 我编辑了答案以显示打印前后以及更多信息
  • 所以问题可能在于您“复制”错误,而不是这段代码。

标签: java arrays multidimensional-array null


【解决方案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

【讨论】:

  • 有趣的答案,谢谢!我将如何应对这些价值观?
  • 再次感谢,我明白你所说的这是一个微妙的问题是什么意思。您提供了很大的帮助和信息丰富的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-06
  • 2021-03-04
  • 1970-01-01
  • 1970-01-01
  • 2023-01-12
  • 1970-01-01
相关资源
最近更新 更多