Java: удаление элементов из коллекции - PullRequest
0 голосов
/ 31 января 2012

У меня есть коллекция, и я хочу реализовать метод add (), чтобы в коллекцию можно было добавлять только положительные целые числа. Коллекция может содержать 4 значения, и я использовал приведенный ниже код, чтобы инициализировать каждое значение как «-1».

  public class Bag implements Collection {


private int[] elements;

public Bag() {
    elements = new int[Runner.SIZE_OF_COLLECTION];
    for (int i = 0; i < Runner.SIZE_OF_COLLECTION; i++) {
        elements[i] = -1;
    }
}

До сих пор в методе add () ниже у меня был этот цикл, повторяющий каждый элемент коллекции и заменяющий каждый элемент, который меньше 0, положительным целым числом, которое я хочу добавить ("toAdd").

Проблема в том, что я хочу добавить положительное целое число «toAdd» один раз, и без перерыва в цикле метод заменяет КАЖДЫЙ элемент «-1» в коллекции положительным целым числом. С разрывом в цикле метод не может добавить положительное целое число вообще. Любые идеи о том, как я могу получить метод, чтобы добавить положительное целое число в коллекцию только один раз?

public void add(int toAdd) {
    for (int i = 0; i < Runner.SIZE_OF_COLLECTION; i++) {
        if (elements[i] <= 0 && toAdd>0) {
            elements[i] = toAdd;
            }
                        break;
    }
}

Заранее спасибо!

Ответы [ 4 ]

1 голос
/ 31 января 2012

Переместить разрыв в оператор if.

0 голосов
/ 31 января 2012

Метод add для интерфейса Collection принимает Object (или универсальный тип, который вы не указали). Если вы пытаетесь переопределить / реализовать метод интерфейса коллекции с помощью метода add, то сигнатура метода неверна и никогда не будет вызвана.

Ваш класс должен выглядеть так:

public class Bag implement Collection<Integer>
{
  // ... other necessary methods

  public boolean add(Integer i)
  {
    // your method...
  } 
}

И, вероятно, это будет проще, чем ваша реализация:

public class Bag extends java.util.ArrayList<Integer>
{
  @Override
  public boolean add(Integer i)
  {
    if ((i != null) && (i > 0)) super.add(e);
  }
}

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

0 голосов
/ 31 января 2012

Заменяет первое значение из elements, которое равно или меньше 0, значением из аргумента toAdd.

public void add(int toAdd) {
    for (int i = 0; i < Runner.SIZE_OF_COLLECTION; i++) {
        if (elements[i] <= 0 && toAdd>0) {
            elements[i] = toAdd;
            break;
        }             
    }
}
0 голосов
/ 31 января 2012

Вы можете использовать ArrayList вместо массива int. Используя ArrayList, вы можете получить индекс первого вхождения -1 и использовать метод set , чтобы добавить новое значение для этого индекса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...