코딩공부

내일배움캠프 16일차

정해인3 2023. 6. 7. 21:15

오늘은 키오스크의 기능을 향상시키는 팀 과제를 했다. 

 

문제1

코드를 실행하던 중 NullPointerException 에러가 발생했다. 찾아본 결과 원인은 다음 코드였다.

private List<WaitOrder> waitOrders;

public void addWaitOrder(int waitingNumber) {
		//에러난 부분
	waitOrders.add(new WaitOrder(waitingNumber, cart, totalPrice, request));
}

new WaitOrder()안에 값을 직접 넣어보기도 했으나 해결되지 않았다. 에러 문구를 다시 찬찬히 살펴보았는데 this.waitOrders가 비었다는 문구에 주목하여 waitOrders에 기본 값을 주었다. 밑은 수정한 코드이다. 

//수정한 코드
private List<WaitOrder> waitOrders = new ArrayList<WaitOrder>();

public void addWaitOrder(int waitingNumber) {
	waitOrders.add(new WaitOrder(waitingNumber, cart, totalPrice, request));
}

 

문제2

for()문 내부가 아예 실행이 되지 않는 문제가 발생하였다. 내부에 시험용 문구를 넣어두었지만 그조차 출력이 되지 않았다. 조건문에 +1을 해두었을 때는 시험 문구만은 출력이 되었지만 인덱스범위를 넘었다는 에러가 발생했었다. 

조건문에 문제의 원인이 있다고 생각하고 해결해 보기로 하였다. 

public void printWaitOrders(){
	for(int i = 0; i < waitOrders.size(); i++){
		System.out.println("대기번호: " + waitOrders.get(i).waitingNumber);
		System.out.println("주문 목록: ");
		for(int j = 0; j < waitOrders.get(i).orderItemList.size(); j++){
//			System.out.println("시험문구");
			System.out.println("상품명: " + waitOrders.get(i).orderItemList.get(j).name);
			System.out.println("상품 설명: " + waitOrders.get(i).orderItemList.get(j).description);
			System.out.println("상품 가격: " + waitOrders.get(i).orderItemList.get(j).price);
		}
		System.out.println("주문 총 가격: " + waitOrders.get(i).totalPrice);
		System.out.println("요청 사항: " + waitOrders.get(i).request);
		System.out.println("주문 일시: " + waitOrders.get(i).orderTime);
		System.out.println();
	}
}

하지만 for()문 안의 내용물만으로 시험 했을 때도 에러가 났다. for()문의 조건문 뿐만 아니라 내부의 문구에도 에러가 있는 것으로 보인다. 

cart에 있던 orderItemList가 제대로 전달되지 않은 것으로 새로 결론내리고 문제를 해결해 보기로 하였다. 아래는 원인이 된 코드이다.

public void addWaitOrder(int waitingNumber) {
	//에러난 부분
	waitOrders.add(new WaitOrder(waitingNumber, cart, totalPrice, request));
}
WaitOrder(int waitingNumber, List<Item> orderItemList, double totalPrice, String request){
        this.waitingNumber = waitingNumber;
        this.orderItemList = orderItemList;
        this.totalPrice = totalPrice;
        this.orderTime = LocalDateTime.now();
        this.request = request;
    }

이 중 WaitOrder에서 리스트를 전달하는 방식이 잘못되었다고 생각해서 다음과 같이 수정했더니 문제가 해결되었다. 

WaitOrder(int waitingNumber, List<Item> orderItemList, double totalPrice, String request){
        this.waitingNumber = waitingNumber;
        this.orderItemList.addAll(orderItemList);
        this.totalPrice = totalPrice;
        this.orderTime = LocalDateTime.now();
        this.request = request;
    }