2014-12-12 5 views
1

Я работаю над массивом объектов в java.Удаление объекта из массива объектов

Я сделал Add, он работает. и у меня возникают проблемы с реализацией Delete (из массива).

объекты из класса с именем Student, имеет имя и идентификатор в качестве членов

моя работа:

// delete an object 
if (count == 0) 
    System.out.println("Sorry there are no items in the system"); 
else { 
    System.out.print("Please enter the ID of Student you'd like to Delete: "); 
    String searchID = in.nextLine(); 
    for (int i =1 ; i<count; i++) { // first : search for the object 
     if (searchID.equalsIgnoreCase(Students[i].getID())) { 
      System.out.print("Are you sure you want do delete " 
        + Students[i].getName()+ " from the System? "); 
      String ans = in.nextLine(); 
      if (ans.equalsIgnoreCase("no")) { break; } 
      if (ans.equalsIgnoreCase("yes")) { 
       Students[i] = Students[Students.length-1]; 
       break; 
      } 
     } else { 
      System.out.println("Sorry, you need to type a valid ID to delete it's object.. "); 
     }      
    } 
+1

попробуйте использовать ArrayList вместо этого. – Narayana

+0

используйте ArrayList. А также, сначала ударил по Google для «удалить из массива в java» http://stackoverflow.com/questions/112503/how-do-remove-objects-from-an-array-in-java –

+1

Не могли бы вы быть более конкретно о том, какая у вас проблема? –

ответ

0

Прежде всего, я не мог понять логику вашего кода. Вы должны проверить ответ до получения 100 * 2 ввода от пользователя. В любом случае, если вы действительно хотите сделать это с помощью простого массива java, вы должны сделать что-то подобное, а затем удалить нулевые объекты. Это неэффективный метод:

String[] a = {"student1", "student2"}; 
    String[] b = {"strudnt3"}; 
    String[] c = new String[a.length + b.length]; 
    // removing one object 
    a[1] = null; 
    // copying both arrays to c 
    System.arraycopy(a, 0, c, 0, a.length); 
    System.arraycopy(b, 0, c, a.length, b.length); 
    // ignore null objects 
    System.out.println(Arrays.toString(c)); 

Чем лучше метод использует ArrayList: Вы можете легко добавлять и удалять объекты из списка.Посмотрите на JavaDoc, здесь http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html

Если вы хотите переписать код с ArrayList:

// creat an ArrayList of the object 
    ArrayList<Student> studentList = new ArrayList<Student>(); 

    // then, ask if the user wants to add object 
    Scanner in = new Scanner (System.in); 
    System.out.print("Would you like to add an object?"); 

    while (true) { 
     String ans = in.nextLine(); 
     if (ans.equals("no")) 
     { 
      break; 
     } 
     // else, create the object and add it to the ArrayList 
     // you can add the attributes from the constructor 
     studentList.add(new Student(22, "name")); 
    } 

Тогда вы можете легко сделать Iterator, делая петлю внутри списка и соответствовать любому полю вы хотите, и, наконец, удалить объект из списка:

if (//find the object) { 
     studentList.remove(object) 
    } 

проверка и этот вопрос для удаления объекта из ArrayList: remove an object from a List

0

Перед вашей for петли создать новый массив того же размера, что и входной массив.

Добавляйте только к новому массиву, если вы не хотите его удалять.

Затем игнорировать элементы массива со значением нуля

0

Вы не можете легко достичь этого в массиве. Вы можете попробовать arraylist.

Удалить

arrayList.remove(Object) or arrayList.remove(index) 

Если вы хотите сделать это массив тогда.

  1. найти индекс удалить объект
  2. Создать новый массив с длиной 1 размер массива.
  3. Скопируйте от 0 до элемента index-1 в новый массив (если индекс равен 0, тогда не нужно этого шага).
  4. копировать из индекса + 1 в длину массива в новый массив (если индекс - это конец массива, тогда нет необходимости).
+0

Вопрос явно задает вопрос об удалении из массива. Если вы не отправляете решение о том, как удалить из массива, вы не отвечаете на вопрос. – ApproachingDarknessFish

0

Во-первых, вы должны, вероятно, просто использовать ArrayList и использовать встроенный, как обсуждалось, here. Если вы хотите использовать массив, вам необходимо изменить размер массива после копирования последнего элемента учащихся на удаленный объект. Без этого усечения вы просто дублируете последний элемент вашего массива.

Поскольку вы не можете изменять размеры массивов java, это действительно означает, что вам нужно скопировать весь массив, кроме последнего элемента, в новый массив. Для этого вы можете попробовать добавить

Students = Arrays.copyOf (Students, Students.length-1);

до вашего перерыва. Но у вас намного меньше накладных расходов памяти, если вы используете ArrayList.

0

Как и другие, лучшая структура данных заключается в использовании ArrayList, поскольку она дает встроенные методы api для динамического изменения размера массива. Это снова заставляет разработчика переписывать его.

Если вообще для обучения, из приведенного выше примера. можно присвоить нуль при снятом индексе или лучшим способом

  1. удалить объект
  2. скопировать вспомогательный массив из индекса удалены длинами массива
  3. изменения размера массива соответственно есть .., чтобы уменьшить Arraylength-1.

вы можете достичь всего этого только с помощью Список_массивов, почему бы не использовать его;)

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