반응형
제가 도서 쇼핑몰 관련 예제를 하다가, 에러가 발생한 것이 있어 기록을 남겨봅니다.
원 코드는 입력이 안되었으나, 상황을 요약하면, 다음의 코드에서 장바구니에 추가하겠습니까 다음에서 스캐너 객체가 입력이 안되는 상황이었습니다.
if (search_index == -1) {
System.out.println("도서의 ID를 확인해 주세요..");
continue;
}
System.out.println("몇 권을 주문하시겠습니까??");
// 몇 권을 살 것인지 입력하는 변수이다.
int count = input.nextInt();
System.out.println("장바구니에 추가하겠습니까?(Y|N)");
input.nextLine();
String yn = input.nextLine();
if (yn.toLowerCase().equals("y")) {
// 카드의 수량 초기값은 0이기에 0번째부터 ++연산자에 따라 연산후 증감이 된다.
// 그리고 search_index에 따른 내가 선택한 북의 번호가 들어갈 것이다; 그리고 count를 통해서 몇권을 살 것인지를 정한다.
cartItemList[cartCount++] = new CartItem(mBook[search_index], count);
System.out.println(mBook[search_index][1] + "가 장바구니에 추가되었습니다.");
}
break;
원인을 찾아보니 다음과 같았는데
// Scanner.nextInt() 메소드가 사용자가 입력한 enter(개행문자) 를 제거하지 않기 때문입니.
// 다시 정리하면 nextInt() 가 숫자는 입력받고, 개행문자는 제거하지않았고 그 상태에서 곧바로
// 개행문자가 다음 scan.nextLine() 의 입력으로 처리되서 발생한 문제였습니다. 원인 해결 법을 적용한 코드는 다음과 같습니다. 바로 input.nextLine()을 한번 더 입력해서 개행문자를 처리해버리는 것입니다. 그리고 처리한 nextLine은 변수를 지정하지 않았기에 값이 날라가고요
if (search_index == -1) {
System.out.println("도서의 ID를 확인해 주세요..");
continue;
}
System.out.println("몇 권을 주문하시겠습니까??");
// 몇 권을 살 것인지 입력하는 변수이다.
int count = input.nextInt();
System.out.println("장바구니에 추가하겠습니까?(Y|N)");
개행되고, 위와같이 출력된다.
input.nextLine();
String yn = input.nextLine();
if (yn.toLowerCase().equals("y")) {
// 카드의 수량 초기값은 0이기에 0번째부터 ++연산자에 따라 연산후 증감이 된다.
// 그리고 search_index에 따른 내가 선택한 북의 번호가 들어갈 것이다; 그리고 count를 통해서 몇권을 살 것인지를 정한다.
cartItemList[cartCount++] = new CartItem(mBook[search_index], count);
System.out.println(mBook[search_index][1] + "가 장바구니에 추가되었습니다.");
}
break;
반응형