2013-11-29 4 views
0

Я работаю в Java прямо сейчас, и я пытаюсь сделать массив копией себя во временный массив, а затем снова перезаписать новый список, однако код не работает.Удаление элемента из массива. (Java)

MobilePhoneInventory.java

public void delete(MobilePhone p) { 
    MobilePhone[] temp = new MobilePhone[list.length-1]; 
    int adj = 0; 
    for (int i = 0; i < list.length; i++) { 
     if (p != list[i]) { 
      temp[i-adj] = list[i]; 
     } 
     else adj = 1; 
    } 
    list = temp; 
    numMobilePhone--; 
} 

MobilePhoneStart.java

if (e.getSource() == myDelete) { 
     if (inven.size() > 1) { 
      inven.delete(inven.get(see)); 
      see--; 
      if (see < 0) { 
       see = 0; 
      } 
      showMP(); 
     } else { 
      System.exit(0); 
     } 
    } 

По какой-то причине это не создает новый список. Есть идеи? Заранее спасибо.

+7

Я бы использовал ArrayList или посмотрел, как он это делает. –

+0

В этом я не могу использовать arraylist. – user3033222

+0

Почему бы вам не использовать array.clone для получения нового массива? – Voidpaw

ответ

3

При копировании массивов Java, мой предпочтительный способ: System.arrayCopy. В вашем случае у вас есть тест внутри цикла, который на самом деле, вероятно, делает ваш подход более подходящим.

Не видя остальной части своего класса и как его изменяемое состояние работает, трудно быть уверенным в решении. В целом, все выглядит нормально. Возможно, есть ошибка с ссылкой где-то, чтобы вы не поняли, что думаете.

Но одна вещь, которую стоит проверить, что ваш тест равенство является правильным:

if (p != list[i]) { 

потому что вы можете найти тест ! ... .equals работает более надежно, чем !=.

+0

У меня такой же результат, как и у меня раньше. Он не удаляет объект из массива. – user3033222

+0

Мне нравится этот ответ. Вы должны предпочесть 'equals()' over '=='. Первый проверяет равенство, как вы определяете его в определении класса, в то время как последний проверяет, смотрите ли вы на тот же самый экземпляр, который может и не быть тем, что вы здесь имеете в виду. По умолчанию реализация 'equals()' просто вызывает 'equals()' для каждого поля объекта - вы можете захотеть сделать больше (или меньше). Если вы пишете свою собственную реализацию 'equals()' на 'MobilePhone', убедитесь, что вы прочитали эту ссылку: (http://stackoverflow.com/questions/2265503/why-do-i-need-to-override- the-equals-and-hashcode-methods-in-java) –

+0

Это не ответ. Это хорошая практика, но это не решило проблему. – user3033222

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