2014-01-19 5 views
1

При добавлении ключа он отображает добавленный ключ, но затем, когда я набираю инвентарь, он говорит, что рюкзак пуст, а также когда я иду использовать элемент, который он не позволит мне, поскольку его нельзя использовать ,Элементы отображаются, добавляются ключи, но не отображаются в инвентаре

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(); 
    } 
} 

ответ

0

Из-за «если/другое (если)» строительство в методе Get.execute, новый элемент никогда не добавляется с помощью метода BackpackImpl.add().

Измените свой метод Get.execute и напечатайте только «Пункт добавлен», когда ваш код действительно вызвал метод BackpackImpl.add(). Кроме того, чтобы ваш код читался, всегда используйте {} при использовании конструкций «if/else (if)». Например:

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); 
} 
+0

Это замечательно, что он добавляет и удаляет большое спасибо, но теперь мой пункт использования не работает, извините, что это боль, мой проект для колледжа, и он должен быть во вторник. Любые предложения :-) – user3211616

+0

Я всю ночь пытался выяснить это :-(u - спасатель жизни – user3211616

+0

Чтобы подтвердить, что ваш код делает то, что вы думаете, добавляет инструкцию печати, например 'System.out.println (" Здесь »)' на каждом шаге (поэтому вы также должны часто использовать '{}': вы можете добавить инструкцию печати без изменения чего-либо еще). Добавьте переменные в print-statement, чтобы убедиться, что они соответствуют вашим ожиданиям. это в основном ручная отладка: ваша IDE должна быть в состоянии предоставить вам такую ​​же информацию при запуске вашей программы в режиме отладки. – vanOekel

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