2012-03-23 11 views
0

Я получаю nullpointerexception в строке 9 (тот, у кого есть комментарий).Практическое руководство. Использование настраиваемого класса в качестве параметра карты

Я пытаюсь использовать метод в качестве параметра в классе ShoppingCart:

import java.util.*; 

public class ShoppingCart { 

    private Map<String, Purchase> ShoppingCart; 

    public void add (String product, int price) { 
     Purchase purchase = new Purchase(product, 1, price); 
     ShoppingCart.put(product, purchase);   //this line doesn't work! 
    } 

    public int price() { 
     Collection<Purchase> total = shoppingCart.values(); 

     } 
} 

Конструктор для метода покупки:

public Purchase(String product, int amount, int price) { 

Главный пытается добавить продукт shoppingCart, который вызывает исключение nullpointer:

ShoppingCart cart = new ShoppingCart(); 
cart.add("milk, 3); 

Я полагаю, что мне не хватает что-то фундаментальное, когда дело касается карт. Что я здесь делаю неправильно?

+0

Это на финском языке, поэтому пришлось сделать перевод. Будем делать более внимательно в следующий раз. – Mark

+0

Создайте объект Map. Также следуйте за камнем верблюда для имен переменных. –

ответ

0

Вы никогда не создавали объект ShoppingCart. Это не похоже на C++, в котором объект создается при определении переменной; все переменные на самом деле ссылаются на объекты, и вам нужно объяснить, что объекты создаются (с new).

Кстати, эта строка вызывает ошибку компиляции (должна быть вашего сайта! Строчными буквами)

private Map<String, Purchase> ShoppingCart; 
+0

Ой, понял. Благодаря! – Mark

1

Вы забыли инстанцирует карту ShoppingCart = new HashMap<String, Purchase>().

Кстати, в Java, переменные всегда начинаются со строчной буквы (верблюжьего), только классы начинаются с букв верхнего регистра (PascalCase)

+0

Любительская ошибка :) Спасибо! – Mark

0

Я думаю, что проблема в том, что вы не инициализировать shoppingCart:

private Map<String, Purchase> ShoppingCart= new HashMap<String,Purchase>()