2010-08-01 4 views
1

У меня есть простая программа, которая позволяет добавлять, редактировать, списывать, искать и удалять записи, сохраняя их на массивах.Как правильно удалить элементы в массивах java

Моя проблема теперь в том, как правильно удалить элементы на ней. Вот мой текущий код.

System.out.print("Input number to delete: "); 
        delnum=scanz.nextLine(); 
        intdelnum=Integer.parseInt(delnum); 

name[intdelnum]=null; 
          course[intdelnum]=null; 
          gender[intdelnum]=null; 
          school[intdelnum]=null; 

Как вы можете видеть, если я перечислил этот массив, который содержит по 10 элементов каждый. Индекс массива, который Ive установлен равным null, навсегда останется нулевым. И я ничего не могу добавить. Знаете ли вы, как лучше это сделать. Таким образом, когда я удаляю элемент массива в индексе 2. Элемент в индексе 3 будет расти. индексировать 2? Поэтому, чтобы позже я мог добавить элемент в индекс, который я установил в null.

+0

Возможный дубликат [Как удалить объекты из массива в java?] (Http://stackoverflow.com/questions/112503/how-do-imove-objects-from-an-array-in- Ява) – McDowell

ответ

1

Для этого я бы использовал ArrayList.

Это позволит вам легко удалять элементы из списка, сдвигая каждый пункт за ним вниз

ArrayList<String> myArrayList; 

/*... initialization and filling in of your data ...*/ 

myArrayList.remove(index); 

Для получения полной справки here страница 1.5.0 API для ArrayList.

6

Вы можете сделать это вручную, переместив содержимое массива вокруг или используя вызов копирования массива, например System.arraycopy, но вы почти наверняка хотите использовать коллекцию. ArrayList - хороший выбор для изменяемого массива. ArrayList.remove позволит вам удалить с помощью индекса:

ArrayList<...> name, course, gender, school; 

intdelnum = Integer.parseInt(delnum); 
name.remove(intdelnum); 
course.remove(intdelnum); 
gender.remove(intdelnum); 
school.remove(intdelnum); 

Некоторые другие случайные заметки о фрагменте кода:

Я предполагаю, что scanz является сканер. Вы можете вызвать nextInt() на нем вместо nextLine() и преобразовать строку в int.

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

class Student { 
    enum Gender {MALE, FEMALE} 

    private String name; 
    private Course course; // This can be a String if that's simpler for your project 
    private Gender gender; 
    private School school; // See note for 'course' 
} 

ArrayList<Student> students; 
1

Вы не можете изменить размер массива после его создания.
Вы можете создать список из массива, например Arrays.asList(), использовать remove() для удаления элементов, которые вы не хотите, а затем использовать toArray() для возврата массива из списка.

1

Вы можете написать метод (код для операции удаления) для смещения значений массива.

как если элемент в точке х удален метод будет выглядеть следующим образом:

private void deleteElement(int del_idx){ 
    if(del_idx <= org_arr.length){ 
     org_arr[del_idx]=null; 
     for(int i = del_idx;i < (org_arr.length-1); i++){ 
      if(org_arr[i+1] != null){ 
       org_arr[i] = org_arr[i+1]; 
      } 
     } 
    } 
} 

Но это будет более целесообразно использовать ArrayList, а не массив в вашем случае.

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