Item item = items[place]; // by default you can have an EmptyItem that does nothing in the inventory when the place is empty
現在讓我們假設你有類似
interface Item {
void use();
}
class Berry implements Item{
@Override
public void use(){
//eating a a barry
}
}
class EmptyItem implements Item{
@Override
public void use(){
//do nothing
}
}
,那麼你將實現使用
0123內的方法的邏輯
我建議你創建你的庫存爲位更復雜的對象,而不是一個數組(複雜的對象可以使用數組組成本身)
想象有可以創建這樣一個庫存(通過它作爲一個參數的大小):
class Inventory{
private Item[] items;
public Inventory(int size){
items = new Item[size];
// references are null by default, just making this explicit for op
for(int i = 0; i<size; i++){
items[i] = null;
}
}
public void addItem(int space, Item item){
// check for input params
// check array boundaries
// check for item in the selected space
if(items[space] == null){
items[space] = item;
}else{
// space not empty!
}
}
// I'd like more the approach of using get item -> item.use() :)
// but this is a bit more inline with op approach
public void useItem(int space){
// check array boundaries
Item item = items[space];
if(item != null){
item.use();
}
}
// keeping the null management inside the class itself
public Item getItem(int space){
// check array boundaries
Item item = items[space];
if(item == null){
item = new EmptyItem();
}
return item;
}
}
試想一下,您所建模是現實生活中的對象,想象他們是如何intefact彼此,並嘗試自己的屬性和行爲相應:)
使用'switch'語句 – knightrider
您正在尋找的關鍵字是「多態性」。令人驚訝的是,迄今爲止還沒有人發表過答案,即使有兩個10k +的用戶。 – BalusC
@knightrider實際上,沒有必要;) –