#java #oop #junit5
#java #ооп #junit5
Вопрос:
Это мой метод удаления количества нулевых элементов:
@Override
public void removeAt(int index) {
int count = 0;
for(int i = index; i < this.array.length -1; i ){
array[i] = array[i 1];
if(Arrays.toString(array).contains("null")) {
count = count 1;
System.out.println("the number of null it has is " count);
}
}
System.out.println(Arrays.toString(array));
}
Это мой тест для метода RemoveAt:
@Test
@DisplayName("remove at index 0, then check size, went from 11 to 10")
void t8_removeAt() {
MutableArray<String> ma = new MutableArray<String>();
//add 11 items to the array
for(int i = 0; i < 11; i ) {
ma.append("number_" i);
}
//delete element 0
ma.removeAt(1);
int actual = ma.size();
int expected = 10;
assertEquals(expected, actual);
}
Это результат:
the number of null it has is 1
the number of null it has is 2
the number of null it has is 3
the number of null it has is 4
the number of null it has is 5
the number of null it has is 6
the number of null it has is 7
the number of null it has is 8
the number of null it has is 9
the number of null it has is 10
the number of null it has is 11
the number of null it has is 12
the number of null it has is 13
the number of null it has is 14
the number of null it has is 15
the number of null it has is 16
the number of null it has is 17
the number of null it has is 18
[number_0, number_2, number_3, number_4, number_5, number_6, number_7, number_8, number_9, number_10, null, null, null, null, null, null, null, null, null, null]
Ответ №1:
Вы не уменьшаете свою внутреннюю array
переменную, поэтому ее размер не меняется. На самом деле вы даже не удаляете элементы из своего списка, а просто сдвигаете все элементы вправо от нулевого элемента, что, я думаю, не то, что ожидалось.
Ответ №2:
Я не вижу в вашем коде ни одного оператора, который мог бы удалить null
элемент из массива. Простым решением является преобразование данного массива в an ArrayList
, а затем использование an Iterator
для итерации ArrayList
и удаления null
элементов. Как только вы закончите с удалением null
элементов, преобразуйте ArrayList
их обратно в массив.
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
public class Main {
public static void main(String[] args) {
// Original array
String[] array = { "a", "b", null, "c", null, null, "d" };
int originalSize = array.length;
// Delete null elements
List<String> list = new ArrayList<>(Arrays.asList(array));
Iterator<String> itr = list.iterator();
while (itr.hasNext()) {
if (itr.next() == null) {
itr.remove();
}
}
// Convert list to array and assign it to original array reference
array = list.toArray(new String[0]);
System.out.println(Arrays.toString(array));
System.out.println("Number of null elements deleted: " (originalSize - array.length));
}
}
Вывод:
[a, b, c, d]
Number of null elements deleted: 3