/ / null ostatni element w tablicy 2D - java, tablice, tablica wielowymiarowa, null

null ostatni element w tablicy 2D - java, tablice, tablica wielowymiarowa, null

Mam następującą tablicę 2D:

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

i szukam zerwać ostatni element w tablicy (myClass[lastIndex][all indexes] = null) przy użyciu następującego kodu:

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

Jednak wydaje się, że usunięcie dwóch ostatnich elementów w tablicy, co powoduje to?

EDYTOWAĆ:

array wydrukuj przed usunięciem:

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 "usunięciu" elementu one(W praktyce chcę "usunąć" element pierwszy, kopiując wszystkie elementy w dół do jednego indeksu i ustawiając go jako ostatni na zero):

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 pełny kod usuwania:

  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 jest indeksem tablicy. myClassCount jest zmienną, która jest inkrementowana / de-inkrementowana, gdy elementy są dodawane / usuwane

Odpowiedzi:

1 dla odpowiedzi № 1

To subtelny problem: Podczas kopiowania referencje są kopiowane, a nie wartości w tablicy, tak aby w ostatnim kroku, ponieważ nie nadpisujesz myClass [5], myClass [5] == myClass [4], więc wszelkie zmiany, które następnie make do dowolnego elementu w myClass [5] są replikowane w myClass [4], ponieważ są one tym samym obiektem! Dlatego, gdy usuniesz każdy obiekt w myClass [5], również usuniesz wszystko w myClass [4]. Można tego uniknąć przez skopiowanie poszczególnych wartości w dół, a nie tylko tablice.

Możesz skopiować wartości w następujący sposób:

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

Na marginesie to zachowanie można wykazać przez:

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