если 17-ую строчку изменить на - "while(array[j] != null)" - то компиляция происходит, но вывод же неправильный, выводитстся массив MEMORY в том же порядке... может я туплю подскажите пожалуйста, не хочется скипать задачу она вроде легкая.. Спасибо!
вот ошыбка -
"java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 10
at com.javarush.task.pro.task10.task1012.Memory.defragmentation(Memory.java:17)
at com.javarush.task.pro.task10.task1012.Memory.main(Memory.java:30)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)"
package com.javarush.task.pro.task10.task1012;
import java.util.Arrays;
import java.util.Objects;
/*
Дефрагментация памяти
*/
public class Memory {
public static final String[] MEMORY = {"object15", null, null, "object2", null, null, null, "object32", null, "object4"};
public static void defragmentation(String[] array) {
for(int i = 0, j = 0; i < 9; i++, j++){
if(array[i] == null){
String tmp = array[i];
while(array[j] == null){
if(j == 8){
break;
}
j++;
}
array[i] = array[j];
array[j] = tmp;
}
}
}
public static void main(String[] args) {
defragmentation(MEMORY);
Arrays.stream(MEMORY).forEach(System.out::println);
}
}
MEMORY.lengtharray.length, чтобы работать с массивами разной длинны 2.В цикле while вы меняете значение j, но не учитываете выход за пределы массива, что и происходит