/ / null posledný prvok v 2D poli - java, polia, multidimenzionálne pole, null

null posledný prvok v 2D poli - java, polia, multidimensional-pole, null

Mám nasledujúce 2D pole:

private static Object[][] myClass = new Object[6][5];

a hľadám null posledný prvok v poli (myClass[lastIndex][all indexes] = null) pomocou nasledujúceho kódu:

for(int y = 0;y < 5;y++) {
myClass[5][y] = null;
}

Zdá sa však, že sa odstránia posledné dva prvky v poli, čo to spôsobuje?

EDIT:

pole pred vytlačením:

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

Po "vymazaní" prvku one(V praxi chcem "odstrániť" prvok jeden skopírovaním všetkých prvkov nadol jedným indexom a nastavením posledného na nulový):

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

Môj úplný kód na odstránenie:

  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 je index poľa. myClassCount je premenná, ktorá sa s prírastkom / vymazaním prvkov zvýši

odpovede:

1 pre odpoveď č. 1

Ide o jemný problém: Keď skopírujete nadol, odkazy sa skopírujú, nie hodnoty v poli tak, že v poslednom kroku, pretože don "t prepísať myClass [5], myClass [5] == myClass [4] tak, aby vás všetky zmeny potom zmenili make to any element v myClass [5] sa replikujú v myClass [4], pretože sú to isté objekty! Preto keď null každý objekt v myClass [5], vymaľete všetko v myClass [4]. skopírovaním jednotlivých hodnôt nadol, a nie iba polí.

Hodnoty môžete kopírovať takto:

for(int i = studentChoice;i < myClass.length - 1;i++) {
for(int y = 0;y < 5;y ++){
myClass[i][y] = myClass[i+1][y];
}
}

Ako vedľajšia poznámka toto správanie možno preukázať nasledujúcimi spôsobmi:

Object[] array1 = {1};
Object[] array2 = array1;
array2[0] = 2;
System.out.println(array1[0]);//Prints 2