본문 바로가기
카테고리 없음

스캐너 객체 오류 - nextInt; 다음의 nextLine;

by prlkt5200 2024. 9. 10.
반응형

제가 도서 쇼핑몰 관련 예제를 하다가, 에러가 발생한 것이 있어 기록을 남겨봅니다.

원 코드는 입력이 안되었으나, 상황을 요약하면, 다음의 코드에서 장바구니에 추가하겠습니까 다음에서 스캐너 객체가 입력이 안되는 상황이었습니다.

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;

 

 

 

반응형