JAVA의 nextInt()와 nextLine() 개행문자 대처

Yumin Jung·2023년 12월 7일
0

ABOUT 프로그래밍

목록 보기
5/11
package scanner.ex;

import java.util.Scanner;

public class ScannerWhileEx4 {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int totalCost = 0;

        while (true) {
            System.out.println("1: 상품 입력, 2: 결제, 3: 프로그램 종료");
            int option = input.nextInt();

            if (option == 1) {
                input.nextLine();

                System.out.print("상품명을 입력하세요: ");
                String product = input.nextLine();

                System.out.print("상품의 가격을 입력하세요: ");
                int price = input.nextInt();

                System.out.print("구매 수량을 입력하세요: ");
                int quantity = input.nextInt();

                totalCost += price * quantity;
                System.out.println("상품명:" + product + " 가격:" + price + " 수량:" + quantity + " 합계:" + price * quantity);
            } else if (option == 2) {
                System.out.println("총 비용: " + totalCost);
                totalCost = 0;
            } else if (option == 3) {
                System.out.println("프로그램을 종료합니다.");
                break;
            } else {
                System.out.println("올바른 옵션을 선택해주세요.");
            }
        }
    }
}

질문과 해결

위의 코드에서 왜 개행문자를 제거하기 위해 nextLine()메서드를 사용하는 것일까?
또한, 왜 int price = input.nextInt(); 줄 아래로는 개행문자 제거를 하지 않는가?

nextInt()메서드는 정수만 받아드린다. 그래서 개행문자 엔터를 하였을 때, 그 엔터는 이후의 nextLine()메서드를 사용할 시에 적용이 된다. 물론, nextInt()메서드는 계속 정수만 받아들이기 때문에 이후 사용시에도 영향이 없다.

chatGPT의 답변

이 Java 프로그램은 사용자로부터 제품 정보를 입력받아 제품명, 가격, 수량을 포함하는 간단한 콘솔 응용 프로그램입니다. 사용자는 제품을 입력하고 결제하거나 프로그램을 종료하는 옵션을 선택할 수 있습니다. 이 프로그램은 사용자가 종료 옵션을 선택할 때까지 메뉴를 표시하고 사용자 입력을 처리하는 무한 루프인 while (true) 루프를 사용합니다.

제가 언급한 코드 부분에 대한 설명을 제공해 드리겠습니다.

int price = input.nextInt();
이 코드는 사용자 입력에서 정수를 읽어들이는 부분으로, 제품의 가격을 나타냅니다. nextInt() 메서드는 입력에서 다음 정수를 읽어들입니다. 참고로, Enter 키를 누른 후에 남아 있는 개행 문자(newline character)는 소비하지 않습니다.

그러나 이 코드 전에 다음과 같은 부분이 있습니다.

input.nextLine(); // 이전에 입력된 개행문자 제거
이 코드는 사용자가 옵션(1, 2 또는 3)을 입력한 후에 입력 버퍼에 남아 있는 개행 문자를 소비하기 위해 사용됩니다. 이 부분이 없으면 뒤이어 나오는 nextLine() 메서드가 즉시 개행 문자를 소비하게 되어 예상치 못한 동작이 발생할 수 있습니다.

개행 문자를 소비한 후에 프로그램은 다음과 같이 제품명을 읽어들입니다.

String product = input.nextLine();

이미 개행 문자가 소비되었기 때문에 이 nextLine() 호출은 사용자가 입력한 실제 내용을 읽어들입니다.

요약하면, 제품명을 읽기 전에 있는 input.nextLine()는 사용자가 옵션을 입력한 후에 남아 있는 개행 문자를 처리하기 위해 필요합니다. 이를 통해 이후의 nextInt() 및 nextLine() 호출이 의도대로 작동하고 사용자 입력을 건너뛰지 않도록 보장합니다.

profile
문과를 정말로 존중해

0개의 댓글