2013-08-22 2 views
0

Предположим, у меня есть класс. Это называется Item.Элемент в индексном указателе массива

public class Item { 

public boolean usable = false; 
protected boolean usage;  
public int id; 
public String name; 
public String type; 
public int stacknum; 
protected int tier; 
public String rarity; 
boolean equipable; 
boolean equiped; 
String altName; 


public Item(int idIn, String nameIn, String typeIn) { 

    usage = false; 
    id = idIn; 
    name = nameIn; 
    type = typeIn; 
    stacknum = 0; 
    tier = 0; 
    rarity = "Common"; 

}//end of constructor 
}//end of class 

Допустим, у меня есть массив под названием:

Inventory = new Item[5]; 

Он содержит эти элементы :

Item elementOne = new Item(1, "Element One", "Array Element"); 
Item elementTwo = new Item(2, "Element Two", "Array Element"); 

т.д.

Inventory[0] = elementOne; 
Inventory[1] = elementTwo; 
Inventory[2] = elementThree; 

и так далее. Как мне приступить к написанию метода, чтобы выяснить, какой элемент в массиве Item (или что-то вообще) является I.e.

elementOne.findPlace 

будет возвращать значение INT 0.

спасибо!

+0

Почему бы не переопределить 'equals (Object o)' и использовать 'List ' с 'contains (T item)' или 'indexOf (T item)'? – NiziL

+0

Я не совсем понимаю, что вы имеете в виду. Не могли бы вы объяснить? – Aaron

+0

В ['List '] (http://docs.oracle.com/javase/7/docs/api/java/util/List.html) есть полезный метод, который делает то, что вы хотите (например, 'indexOf (I item) '). Вы можете использовать его, если вы реализуете метод 'equals (Object o)' в своем классе 'Item'.Я понятен? – NiziL

ответ

3

Возможно, вы не сможете сделать это в этом случае из-за объема массива и того факта, что класс не знает об окружающей среде.

использовать список объектов, и использование:

myList.indexOf(item) 

, чтобы получить индекс Int.

Класс предмета также должен включать метод equals(.

+0

+1. Аналогичную вещь можно сделать и с массивом. Но дело в том, что вам нужно пройти через контейнер, поскольку сам элемент «не знает о его окружении». – Thilo

+0

и нужно предоставить метод 'Item.equals()' –

+0

Извините, я не понимаю, что вы имеете в виду, когда говорите «пройдите через контейнер». Также вы можете привести пример Item.equals () метод? – Aaron

0

Вы можете сделать это с помощью массивов, но он может быть ошибочным, и поэтому требуется много защитного кодирования. В классе Пункт: public int getID(){return this.id;}

int index = Inventory[element.getID()-1]; 

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

public static int getIndexOfItem(Item item, Item[] inventory){ 
    if(inventory == null || item == null) 
    return -1; 
    if (item.getID()-1 > inventory.length) 
    return -1; 
    return inventory[item.getID()-1]; 
} 
+0

wow, спасибо! Я попробую это – Aaron

0

Как бы идти о написании метода, чтобы выяснить, какой элемент в массиве в позицию (или что-нибудь в общем) является

На основе этой цитируемой части вопроса, пожалуйста, рассмотрите следующий ответ: более общее решение

Item result= null ; 
for(Item e: Inventory) { 
    if(<whatever-your-search-condition-is>) { 
     result= e ; 
     break; 
    } 
} 
if(result != null) 
    <found> 
else 
    <not found> 

A:

List<Item> result= new LinkedList<Item>() ; 
for(Item e: Inventory) { 
    if(<whatever-your-search-condition-is>) 
     result.add(e); 
} 
if(result.size() > 0) 
    < result.size() found > 
else 
    < none found > 

Примечание: этот код работает как для инвентаря, являющегося массивом, так и для List, или вообще Collection.

+0

Спасибо, я рассмотрю использование списков, поскольку это новая концепция для меня и, похоже, является популярным решением. – Aaron