2013-03-13 2 views
1

Когда я пытаюсь вызвать метод BuyItem, так что класс Rebel может купить товар из класса Item, я получаю сообщение:NullPointerException в Java с BlueJ

java.lang.NullPointerException: null

Я чувствую, как I' вы все пытаетесь, кто-нибудь видит, что не так в коде?

Вот мои методы:

public boolean buyItem(Item item) { 
    int totalWeight = currentWeight() + item.getWeight(); 
    if(totalWeight <= maxCarryingCapacity && money >= item.getPrice()){ 
     money -= item.getPrice(); 
     backpack.put(item.getName(), item); 
     return true; 
    } else { 
     return false; 
    } 
} 

и

/** 
* @param item 
* @return current carrying weight 
*/ 
private int currentWeight() { 
    int tempWeight = 0; 
    for(Entry<String, Item> entry: backpack.entrySet()) { 
     tempWeight += entry.getValue().getWeight(); 
    } 
    return tempWeight; 
} 

я был бы очень рад, если бы кто-нибудь из вас может мне помочь, так как им застрял!

Это вторая строка в currentWeight и первой строке в buyItem, которая получает ошибку. В окне терминала показано:

rebel1.buyItem(item1) 
Exception occurred. 

java.lang.NullPointerException 
at Rebel.currentWeight(Rebel.java:190) 
at Rebel.buyItem(Rebel.java:56) 
+1

Какая строка является исключением? Я предполагаю, что элемент не равен нулю. Или это? – Pete

+3

Прежде всего, добавьте полное исключение stacktrace и полный исходный код, где произошел сбой. Мы не можем помочь вам с частичным кодом. –

+0

Да, нам нужно больше, чтобы продолжить здесь. Здесь много вещей, которые могут быть пустыми. – MikeTheLiar

ответ

1

Это определенно похоже, что рюкзак не был инициализирован. Может быть, стоит использовать конструктор как

public class Rebel{ 
    private final Map<String, Item> backpack; 
    public Rebel(Map<String, Item> backpack, <Other parameters){ 
     this.backpack = backpack; 
    } 
    public Rebel(<Other parameters>){ 
     this(new HashMap<String,Item>(),<Other parameters>); 
    } 
} 

Очевидно замена <Other parameters> с текущими параметрами конструктора.