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

justcoin님의 프로필 이미지

작성한 질문수

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

정리

ProductOrderMain 질문 드려요

24.07.26 23:48 작성

·

78

0

 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.


1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
기존 정답에 Scanner 기능을 추가 했는데 nextInt()의 빈공간 데이타 때문에 nextLine() 입력 오류가 나서 이런식으로 하니 오류는 잡았고 정상 작동 되었습니다. 이 방법 말고 다른 방법은 없을까요?

매번 nextInt 뒤에 scanner.nextLine()을 넣어야 하는건지..?

int total =0;

ProductOrder product1 = new ProductOrder();
System.out.print("상품명1을 입력하세요: ");
String name = scanner.nextLine();
product1.productName =  name;

System.out.print("가격1을 입력하세요:");
int price100 = scanner.nextInt();
product1.price = price100;
scanner.nextLine();  //삽입

System.out.print("수량1을 입력하세요:");
int quantity100 = scanner.nextInt();
product1.quantity = quantity100;
scanner.nextLine();  //삽입


ProductOrder product2 = new ProductOrder();
System.out.print("상품명2을 입력하세요:");
String name2 = scanner.nextLine();
product2.productName = name2;



System.out.print("가격2을 입력하세요:");
int price200 = scanner.nextInt();
product2.price = price200;
scanner.nextLine();  //삽입


System.out.print("수량2을 입력하세요:");
int quantity200 = scanner.nextInt();
product2.quantity = quantity200;
scanner.nextLine();  //삽입



ProductOrder product3 = new ProductOrder();
System.out.print("상품명3을 입력하세요");
String name3 = scanner.nextLine();
product3.productName = name3;


System.out.print("가격3을 입력하세요:");
int price300 = scanner.nextInt();
product3.price = price300;  //삽입
scanner.nextLine();

System.out.print("수량3을 입력하세요:");
int quantity300 = scanner.nextInt();
product3.quantity = quantity300;
scanner.nextLine();  //삽입

답변 2

0

codesweaver님의 프로필 이미지

2024. 07. 29. 14:50

안녕하세요. justcoin님, 공식 서포터즈 코즈위버입니다.

현재 강의 단계에서는 nextInt() 호출 후 버퍼 문제를 해결하기 위해 별도의 방법을 사용하기 어려운 부분이 있습니다.

AI의 제안처럼 모두 nextLine()으로 읽어 각 타입으로 파싱하는 방법도 번거롭기는 하기에, 현재로서는 nextInt() 호출 후 nextLine()을 호출하는 것으로 해결하여 주시기 바랍니다.

감사합니다.

0

인프런 AI 인턴님의 프로필 이미지

2024. 07. 26. 23:51

안녕하세요, 인프런 AI 인턴입니다.

justcoin님께서 제기하신 Scanner와 관련된 nextInt()nextLine() 사용 시 발생하는 문제에 대해 다른 방법을 찾고 계신 것으로 보이며, 특히 nextInt()를 사용한 후 입력 버퍼를 처리하는 과정에 대한 해결책을 문의하셨습니다. 이와 관련하여 nextInt()를 사용하고 나서 남아있는 개행 문자(엔터키 입력)를 처리하기 위해 바로 nextLine()을 사용하는 방식 외에 다른 방법을 찾으시는 것 같습니다.

Scanner에서 nextInt()를 사용한 후 남은 개행 문자를 처리하지 않으면, 이어질 nextLine() 호출이 곧바로 개행 문자를 읽어 버리면서 입력을 건너뛰는 문제가 발생합니다. 여러분이 이미 적용하신 scanner.nextLine();을 사용해 입력 버퍼를 비우는 방법이 가장 일반적입니다. 하지만 이 방법이 번거롭게 느껴진다면, 모든 입력을 nextLine()으로 받고, 이후 정수나 다른 타입으로 변환하는 방법을 사용할 수 있습니다.

이런 접근 방식으로는:

  1. 사용자의 모든 입력을 String 타입으로 받아옵니다.
  2. 필요한 경우, 적절한 타입으로 변환합니다. 예를 들어, int 타입이 필요하다면 Integer.parseInt() 메서드를 사용합니다.
System.out.print("가격1을 입력하세요:");
String priceStr = scanner.nextLine();  // 모든 입력을 문자열로 받음
int price100 = Integer.parseInt(priceStr);  // 문자열을 정수로 변환
product1.price = price100;

위 방법을 적용하면 nextInt()nextLine()을 추가로 사용하여 입력 버퍼를 비우는 번거로움 없이 명확하게 입력을 처리할 수 있습니다.

비슷한 문제에 대한 자세한 설명과 해결 방법을 찾으신다면, 아래 링크들이 도움이 될 수 있습니다:

justcoin님의 경우, 모든 사용자 입력을 nextLine()으로 받고 필요에 따라 적절한 타입으로 변환하는 방식을 고려해 보시는 것이 좋겠습니다. 이 방법은 코드를 더 명확하게 만들고, 이와 같은 문제를 우아하게 해결할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏

추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

justcoin님의 프로필 이미지

작성한 질문수

질문하기