2013-06-16 1 views
-1

Я работаю через назначение класса, и я не уверен, как удалить элемент из массива. Я прочитал предложения по использованию ArrayUtils или преобразованию массива в связанный список. Я все еще очень новичок в Java, поэтому я не уверен, что мне действительно нужно что-то делать, или если я упускаю из виду нечто гораздо более простое. Мне также необходимо выполнить несколько процессов, требующих пропускать все нулевые элементы в массиве. У меня нет большого профессора, и попытки общения бесполезны, поэтому я надеюсь, что кто-то здесь может помочь. Далее следует мой код. Соответствующие биты начинаются с «public void remove». Я просто разместить весь код в этом классе, чтобы дать более полную картину того, что происходит:Как удалить элемент из массива в Java? И как мне пропускать нулевые элементы массива?

public class WatchCollection 
{ 

private Watch watches[]; // an array of references to Watch objects 
          // watches[i] == null if there is no watch in position i 
private int num;   // size of the array 

private void init(int numberOfWatches) { 
    watches = new Watch[numberOfWatches]; 
    for (int i=0;i<numberOfWatches;++i) 
    { 
     watches[i] = null; 
    } 
    num = numberOfWatches; 
} 
public WatchCollection(int numberOfWatches) 
{ 
    init(numberOfWatches); 
} 
public WatchCollection (Watch w1) 
{ 
    init(1); 
    add(w1);    
} 

// TODO Define WatchCollection (Watch w1, Watch w2) constructor 
public WatchCollection (Watch w1, Watch w2) 
{ 
} 

// TODO Define WatchCollection (Watch w1, Watch w2, Watch w3) constructor 
public WatchCollection (Watch w1, Watch w2, Watch w3) 
{ 
} 

public void add (Watch w) 
{ 
    for(int i=0;i<num;++i) 
    { 
     if (watches[i]==null) 
     { 
      watches[i]=w; 
      return; 
     } 
    } 
} 
public void remove (Watch w) 
{ 
    // TODO Write a code that removes Watch w if it is in the array 

} 

public int size() 
{ 
    // TODO Write a code that returns actual number of watches, skip all null array elements 
} 

public Watch at(int index) 
{ 
    // TODO Write a code that returns a watch with the specified index (skip all null array elements) 
    // TODO Throw an exception if the index is < 0 or >= actual number of watches 
    // For example, if the array contains w1 w2 null w3 w4 
    // index 0 -> w1 
    // index 1 -> w2 
    // index 2 -> w3 
    // index 3 -> w4 
    // index 4 -> an exception 

} 

public String toString() 
{ 
    String str="{\n"; 

    int index=0; 
    for(int i=0;i<num;++i) 
    { 
     if (watches[i]!=null) 
     { 
      str+=" " +index++ + ": " +watches[i] + "\n"; 
     } 
    } 
    str+=" }"; 
    return str;  
} 
} 
+3

Просто используйте 'ArrayList' и сделайте свою жизнь проще –

+1

Кажется, вы просите нас сделать домашнее задание для вас. Что вы наделали? – Raedwald

+0

Массивы полны «нуль» при их создании. Вам не нужно их обнулять, прежде чем использовать их. –

ответ

2

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

+1

+1 Если вы не можете использовать этот класс, потому что это упражнение, OP должен хотя бы прочитать этот класс и скопировать то, что он делает. –

2

Поскольку это назначение класса, я просто предоставить алгоритм для реализации способа удалить в массиве (при условии, что это алгоритм, конечно):

function remove (Element element) 
    int index <- -1 
    for i <- 0 to num - 1 
     if (array[i] is equals to element) then 
      index <- i 
      break 
     end if 
    end for 
    if index > -1 then 
     for i <- index to num - 2 
      array[i] <- array[i+1] 
     end for 
     num <- num - 1 
    end if 
end function 

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

+0

Вы могли бы просто дать OP код из ArrayList, который не обманывает слишком много, я думаю. ;) Глупый вопрос, почему есть две петли, а не одна? –

+0

@PeterLawrey, поскольку это назначение класса, я предпочитаю не давать прямой реализации :). –

+0

Я хочу сказать, что ArrayList уже есть. ;) –

1

Не давая вам ответа, вот как вы могли бы улучшить, когда у вас есть.

public class WatchCollection { 
    private Watch watches[]; // an array of references to Watch objects 
    // watches[i] == null if there is no watch in position i 
    private int num = 0;  // size of the array used. 

    public WatchCollection(int numberOfWatches) { 
     watches = new Watch[numberOfWatches]; 
    } 

    public WatchCollection(Watch w1) { 
     this(1); 
     add(w1); 
    } 

    public void add(Watch w) { 
     if (watches.length == num + 1) 
      watches = Arrays.copyOf(watches, num*2); 
     watches[num++] = w; 
    } 

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

0

Здесь все, что вам нужно, имеет дело с объектами Watch, поэтому вам не нужно использовать массив.

Использование ArrayList

это лучший способ, чтобы сделать свою работу.

Этот класс имеет методы для доступа к индексированных элементов, удаление индексированный элемент, динамическое расширение массива и т.д.

Ссылка ведет к официальной документации для класса ArrayList.

0

Используйте Arraylist вместо массива. если у вас уже есть массив, конвертируйте его в A

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