2015-02-16 4 views
0

Я новичок в программировании на Java. Я хочу знать, как сдвинуть оставшиеся элементы после удаления выбранного элемента. Проблема в том, что конец индекса показывает тот же самый элемент из предыдущего индекса последнего. Я просто хочу, чтобы результаты были такими же: {1, 44, 5, 34, 8, 10, 11, 100, 0, 11, 0}.Удалите элемент и сдвиньте остальные элементы влево

Мой фактический выпуск: {1, 44, 5, 34, 8, 10, 11, 100, 0, 11, 11}.

Я покажу вам свой фактический код. Мне не нужен ArrayList или List для работы. Я хочу протестировать его без них.

for (int i = indexToDelete; i < array.length-1; i++) { 
     array[i] = array[i+1]; 
     size--; 
    } 
for (int i = 0; i < array.length; i++) { 
    System.out.println("The element at index " + i + ": " + array[i]); 
} //END for()    
System.out.println(size); 

ответ

0

Если вы хотите установить последний элемент к нулю, вы должны установить последний элемент к нулю:

for (int i = indexToDelete; i < array.length-1; i++) { 
    array[i] = array[i+1]; 
    size--; 
} 
array[array.length-1] = 0; 

Вероятно, вы должны проверить, если массив действительно содержит какие-либо элементы.

2

Вы не можете удалить объект из массива, который уже выделен. У вас есть 2 варианта:

  1. array = Arrays.copyOf(array, array.length - 1); - Это создало копию на месте удаления последнего элемента
  2. Преобразовать в список массива и вызвать метод удалить.

Пример # 1:

int[] array = {1,2,3}; 
    int indexToDelete = 1; 
    for (int i = indexToDelete; i < array.length-1; i++) { 
     array[i] = array[i+1]; 
    } 
    array = Arrays.copyOf(array, array.length - 1); 
    for (int i = 0; i < array.length; i++) { 
     System.out.println("The element at index " + i + ": " + array[i]); 
    } 

Выход:

The element at index 0: 1 
The element at index 1: 3 
0

Вы можете сделать копию массива без последнего элемента:

array = Arrays.copyOf(array, array.length - 1); 
0

Вы могли бы держать другой int переменная для хранения текущего размера массива (после элемента s удалены).

Или, вы можете удалить элемент из конца и использовать Arrays.copyOf(int \[\], int)

Самое главное, независимо от того, какой из этих двух подходов, которые вы используете, если вы удаляете элемент из середины вы могли бы рассмотреть возможность копирования последнего элемента на позицию удаляемого элемента, вместо того, чтобы смещать все последующие элементы на 1. Если это сработает для вас, то это будет значительно более эффективно.

Смежные вопросы