인프런 커뮤니티 질문&답변

wosyh18님의 프로필 이미지
wosyh18

작성한 질문수

김영한의 실전 자바 - 기본편

캡슐화

접근제어자 문제와 풀이 2번 질문

작성

·

377

0

안녕하세요 2번 풀이 중 NullPointerException이 발생했는데 어디서 발생한건지 모르겠어서 질문 드립니다.선생님의 답안과 차이는 전체 가격 합 출력하는 부분을 저는 displayItems() 메서드 안에 넣었고 답안은 calculateTotalPrice()메서드로 빼서 계산한 차이인데 이런 이유 때문일까요?

답변 4

0

display함수 안에 있는 for문에 객체 생성하시고 item값을 넣으셔야죠 Item item = items[i]; 이 코드로 for문을 항상 저렇게 쓰시면 안되고 떄에따라서 쓰셔야합니다

0

안녕하세요. wosyh18님, 공식 서포터즈 OMG입니다.

아마 아래에 작성한 같은 코드로 되어 있을 것 같은데요,

반복문을 돌면서 상품명과 합계를 출력하는 것을 2번 실행하면 실행결과화면과 같이 장바구니 상품 목록을 출력하고, 그 다음 반복문이 실행할 때는 items에는 어떠한 상품도 존재하지 않아 NullPointerException이 발생합니다.

배열의 크기를 미리 10으로 선언했기 때문에 이 배열을 전부 순회하는 코드로 반복문이 작성되어 있어서 발생하는 상황입니다 😀

 

image

Item

package access.ex;

public class Item {
    private String product;
    private int price;
    private int quantity;
    public Item(String product, int price, int quantity) {
        this.product = product;
        this.price = price;
        this.quantity = quantity;
    }

    public String getProduct() {
        return product;
    }
    public int getTotalPrice() {
        return price * quantity;
    }
}

ShoppingCart

package access.ex;

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

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

    public void displayItems() {
        System.out.println("장바구니 상품 출력");
        for (Item item : items) {
            System.out.println("상품명:" + item.getProduct() + ", 합계:" + item.getTotalPrice());
        }
        for (Item item : items) {
            total += item.getTotalPrice();
        }
        System.out.println("전체 가격 합:" + total);
    }
}

ShoppingCartMain

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

감사합니다.

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. wosyh18님

도움을 드리고 싶지만 질문 내용만으로는 답변을 드리기 어렵습니다.

실제 동작하는 전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.

구글 드라이브 업로드 방법은 다음을 참고해주세요.

https://bit.ly/3fX6ygx

 

주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요

 

추가로 다음 내용도 코멘트 부탁드립니다.

1. 문제 영역을 실행할 수 있는 방법

2. 문제가 어떻게 나타나는지에 대한 상세한 설명

링크: 공식 서포터즈

링크: 자주하는 질문

감사합니다.

0

메인이 안보여서 메인 상태를 잘모르겟는데.

쇼핑카트 클래스 에서 items배열 선언을 보시면 참조 배열로 선언하였습니다.

참조배열 값을 지정해 주지 않으면 값이 null입니다.(배열 길이만 10으로 지정되어 있습니다.)
그리고 ddisplayItems()에서 아이템 배열을 전부를 출력하고 있습니다.
2번째 배열에 널 값이 들어가 있어서 널포인트익셉션 오류가 나네요.

addItem() 한만큼 정보가 출력될수 있게 바꿔야할거에요.

wosyh18님의 프로필 이미지
wosyh18

작성한 질문수

질문하기