2015-02-12 4 views
0

Так что скажем, у меня есть класс BaseballCard, который создает бейсбольную карту. Теперь мне нужно сделать еще один класс, который будет моим классом коллекции.Как создать свою собственную коллекцию?

Например, я бы назвал это BaseballCardCollection

, а затем я хочу, чтобы создать методы, как

размер (который возвращает количество карт в коллекции)

addCard (добавляет объект в бейсболе коллекция объектов)

removeCard (удаляет бейсбольную карточку)

и так далее

Что было бы лучшим способом сделать это. Я попытался сделать это

public CardCollectionList() { 
    BaseballCard[] baseballCardList = new BaseballCard[101]; 
} 

Таким образом, каждый объект инсинуировал с массивом типа бейсбольной карточки размера 100

И затем, например, метод размера я пытался что-то вроде этого

public int size(){ 
    int size = 0; 
    for(int i = 1; i<this.baseballCardList.length; i++) 
     if (baseballCardList!= null) 
      size+=1; 

} 

Но это не работает, потому что «baseballCardList не может быть разрешен переменной»

+0

я опасайтесь вызове 'array' 'List' на Java, так как это может привести к ошибочным предположениям, если кто-то использует ваш код. –

+2

Вы должны определить 'baseballCardList' как поле в своем классе, а не как локальную переменную в любом из методов или конструкторов. – RealSkeptic

+0

новый BaseballCard [101] создает массив размером 101 объект, а не 100 –

ответ

0

Переместите переменную BaseballCard[] baseballCardList за пределы конструктора, сделайте это полем d в вашем классе. Сделайте аналогичные с size.

Это, как класс должен выглядеть следующим образом:

public class CardCollectionList { 
    //fields 
    private BaseballCard[] baseballCardList; 
    private int size; 

    //constructor 
    public CardCollectionList() { 
     baseballCardList = new BaseballCard[101]; 
    } 
    //method 
    public int getSize() { 
     return this.size; 
    } 
} 
0

Вы могли бы попробовать создать свой собственный класс, реализующий интерфейс Collection и определить свои собственные методы + реализовать Collection методы:

public class myContainer implements Collection <BaseballCard> { 

} 
+0

или полностью повторно использует существующую коллекцию ... –

2

Вы могли бы попробуйте использовать ArrayLists - http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html:

ArrayList<baseballCard> baseballCardList = new ArrayList<baseballCard>(0); 

public boolean addCard(baseballCard card){ 
    return baseballCardList.add(card); 
} 

public boolean removeCard(int card){ 
    return baseballCardList.remove(card); 
} 

public baseballCard getCard(int card){ 
    return baseballCardList.get(card); 
} 

public int sizeBaseballCardList(){ 
    return baseballCardList.size(); 
} 

public ArrayList<baseballCard> getBaseballCardList(){ 
    return baseballCardList; 
} 
0

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

class CardCollectionList { 
    BaseballCard[] baseballCardList; 

    public CardCollectionList() { 
    baseballCardList = new BaseballCard[101]; 
    } 

    public int size(){ 
    int size = 0; 
    for(int i = 1; i<this.baseballCardList.length; i++) { 
     if (baseballCardList[i] != null) { 
     size+=1; 
     } 
    } 
    return size; 
    } 
} 

Код максимально приближен к вашему фрагменту. Существует несколько способов улучшить это (отслеживать размер при добавлении, автоматическое перераспределение массива и т. Д.). Но это начало, если вы хотите попробовать это сами.

Как правило, вы, вероятно, просто используете ArrayList<BaseballCard>.

0

Теперь мне нужно сделать еще один класс, который будет моим классом коллекции. ... Какой был бы лучший способ сделать это.

Я не хватаю репутации комментировать ваш вопрос, так что я буду считать, что вы просто хотите хранить объекты бейсбольной карточки в Java Collection. Java SDK предлагает множество опций.Поскольку вы спрашиваете о «лучшем» способе выхода, я бы использовал один из них, если вам не нужно добавлять дополнительные функции.

, если вы не можете найти то, что вам нужно от Java SDK или просто хотите создать свою собственную коллекцию, то следуйте советам по @ Michal-Szydłowski выше

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