NullPointerException 오류 1

이리·2024년 4월 4일
0

java 접근 제어자를 활용하면서 간단한 예제를 풀며 에러가 생겨 해결하던 중 다시 같은 실수를 반복하지 않기 위해 이번 블로그를 포스팅하게 되었다.


문제는 다음과 같다.
ShoppingCart와 Item 클래스를 생성하고 ShoppingCartMain에서 해당 클래스를 활용해서 문제를 해결하는 것이다.

[ShoppingCartMain]

package access.ex;

public class ShoppingCartMain {
    public static void main(String[] args) {
        ShoppingCart cart = new ShoppingCart();

        Item item1 = new Item("마늘", 2000, 2);
        Item item2 = new Item("상추", 3000, 4);

        cart.addItem(item1);
        cart.addItem(item2);

        cart.displayItems();
        cart.showTotal();
    }
}

[ShoppingCart]

package access.ex;

public class ShoppingCart {
    private Item[] items = new Item[10];
    private int itemCount = 0;

    public void addItem(Item item){
        if (itemCount == 10) {
            System.out.println("장바구니가 가득 찼습니다.");
            return;
        }
        items[itemCount] = item;
        itemCount++;
    }

    public void displayItems(){
        System.out.println("장바구니 상품 출력");
        for (int i = 0; i < itemCount; i++) {
            items[i].showItem();
        }


    public void showTotal(){
        int total = 0 ;
        for (int i = 0; i < itemCount; i++) {
            total = items[i].sum();
        }
        System.out.println("총 금액 : "+ total);
    }
}

[Items]

package access.ex;

public class Item {
    private String name;
    private int price;
    private int quantity;

    public Item(String name, int price, int quantity) {
        this.name = name;
        this.price = price;
        this.quantity = quantity;
    }

    public void showItem(){
        System.out.println("상품명: " + name + ", 합계: " + (price*quantity));
    }

    public int sum(){
        return quantity * price;
    }
}

문제는 ShoppingCart 내의 displayItems() 와 showItem()에서 발생했다.
이전 코드로

for (Item item : items) {
	item.showItem();
}

를 사용했는데 이렇게 될 경우 items[10] 중 item이 생성되지 않은 인덱스까지 모두 계산되기 때문에 null이 발생한 것이었다.

위의 문제는 itemCount를 사용해서 해결 할 수 있었다...

profile
Bonjour!

0개의 댓글