2015-05-06 6 views
0
public class SortedListOfImmutables { 


// Assume that I already have constructors that create new objects, 
// thus have its own items array. 

private Listable[] items; 

Метод ниже удаляет элемент из списка. Если в списке содержится тот же элемент, к которому относится параметр, он будет удален из списка. Если элемент отображается в списке более одного раза, удаляется только один экземпляр. Если элемент не отображается в списке, то этот метод ничего не делает. @param itemToRemove относится к элементу, который должен быть удален из спискаУдаление объектов из массива объектов

public void remove(Listable itemToRemove) { 

    Listable[] newList = new Listable[items.length - 1]; 

    int count = 0; 

    if(items.length == 0){ 
     newList[0] = itemToRemove; 
    }else { 
/*Compares objects. If they are equal, I replace the index of items 
    * to null. I use int count to make sure that it only makes one object 
    * null. 
    */ 
     for(int i = 0; i < items.length; i++){ 
      while(count == 0){ 
       if(items[i].equals(itemToRemove)){ 
        items[i] = null; 
        count++; 
       } 
      } 
     } 
    } 

    int changeVar = 0; 

/* Copy all the objects into my newList array. Wherever items is null, 
    * skip to the next index of items and put it into newList. 
    */ 
    for(int i = 0; i < newList.length; i++){ 
     newList[i] = items[i + changeVar]; 
     if(items[i + changeVar] == null){ 
      changeVar += 1; 
      newList[i] = items[i + changeVar]; 
     } 
    } 

    items = newList; 

} 

Когда я запускаю это я получаю ошибку тайм-аута. Что я сделал не так, и как я могу это исправить. Примечание: Я не разрешается использовать ArrayList, HashSet или LinkedList,

+0

Почему вам не разрешено использовать ArrayList, HashSet или LinkedList? – Iqbal

+0

Какова ценность items.length? –

+0

@ Tirupati Rao: limits.length может иметь любое значение. @ Iqbal: Мой класс компьютерных наук хочет, чтобы я жестко кодировал его, прежде чем изучать ArrayList, HashSet или LinkedList. –

ответ

1

Изменить второй цикл для

int j=0; 
for (int i = 0; i < items.length; i++) { 
     if (items[i] ! = null) { 
      newList[j] = items[i]; 
      j++; 
     } 
} 

Это должно работать для вас.

Edit:

Снимите петлю while (count==0), это создает тайм-аут.

+0

Это был хороший снимок, но я все еще получаю «ошибку таймаута», когда я запускаю тесты своих профессоров. –

+0

. Проверьте мое изменение в приведенном выше ответе, оно вам поможет. Цикл while создает тайм-аут. Просто удалите его. Надеюсь это поможет. – Iqbal

+0

Если я удалю мой цикл While, то не будет ли у меня несколько NULL, если у меня есть объекты, которые являются дубликатами? Я должен удалить конкретный объект из массива объектов, но если есть несколько объектов, которые являются одинаковыми, я могу удалить только один из них. –

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