项目显示已添加密钥但未显示在清单中

时间:2014-01-19 07:29:47

标签: java

当添加密钥时,它会显示添加的密钥,但是当我输入库存时,它会说背包为空,当我去使用它不会让我这样的项目时,因为它不可用。

public class Get extends AbstractCommand {

public Get (String name, String description){
    super (name, description);
}
@Override 

public void execute (Game game, String string) {

    Item temp = game.getCurrentRoom().getItem(string);

    UserInterface ui = game.getUI();

    if(temp == null) ui.println("Item added\n");

    else if (!(temp instanceof Moveable)) ui.println("item can not be moved");

    else if (!game.getBackpack().add(temp)) ui.println("item can not be moved");

    else game.getCurrentRoom().removeItem(temp);


}

}


    @Override 
   public void execute(Game game, String string){
      Item itemInBag = game.getBackpack().getItem(string);
      Item itemInRoom = game.getCurrentRoom().getItem(string);


      if(itemInBag!= null) {

            if(itemInBag instanceof Useable){
               game.setGameState(((Useable)itemInBag).use(game));
                        }else game.getUI().println("you can not use item");

      }else if(itemInRoom!= null){
                if(itemInRoom instanceof Useable){
                    game.setGameState(((Useable)itemInRoom).use(game));
                         }else game.getUI().println("this item can not be used");
               }else {

                    game.getUI().println("take the item and use when you need to");


      }
      }
   }

public class Inventory extends AbstractCommand {

public Inventory (String name, String description){
    super (name, description);
}
@Override 

public void execute (Game game, String string) {

    if(((BackpackImpl)game.getBackpack()).getCount()==0) {
            game.getUI().println("Backpack is empty");

    }else {
        for(Item i: game.getBackpack().getItems()) {
            game.getUI().println(i.getName());

             }

            }
        }

}

    List<Item> items;
    int maxCapacity;

    public BackpackImpl (int maxCapacity){

    this.maxCapacity = maxCapacity;
    items = new ArrayList<Item>(5);

    }

    public BackpackImpl () {
    this.maxCapacity = 5;

    }

    @Override
    public boolean add(Item item){
    if(items.size()>maxCapacity) 

    {System.out.println("your backpack canot fit no more\n");
    return false;
    }
    items.add(item);
    return true;
    }

    @Override
    public Item remove(String string){
        for(Item i: items){
        if(((i.getName()).toLowerCase()).equals(string.toLowerCase())) {
            items.remove(i);
            return i;

            }

        }
    return null;
    }

    @Override
    public Item getItem(String string){
    for(Item i: items){
        if(((i.getName()).toLowerCase()).equals(string.toLowerCase())) {

            return i;
        }
    }
    return null;
    }


    @Override
    public int getCapacity(){
        return maxCapacity;

    }

    @Override
    public List<Item> getItems(){

        return items;
    }

    public int getCount (){
    return items.size();

    }
    public void clear(){
    items.clear();
    }
}

1 个答案:

答案 0 :(得分:0)

由于Get.execute方法中的“if / else(if)”构造,永远不会通过BackpackImpl.add()方法添加新项目。

修改您的Get.execute方法,只在代码实际调用BackpackImpl.add()方法时打印“已添加项目”。另外,为了保持代码的可读性,在使用“if / else(if)”结构时始终使用{}。 E.g:

if (temp == null) {
    ui.println("Item added\n");
} else if (!(temp instanceof Moveable || game.getBackpack().add(temp))) {
    ui.println("item can not be moved");
} else {
    game.getCurrentRoom().removeItem(temp);
}