Java 응용하기(자판기)

김학산·2024년 10월 31일
post-thumbnail

(목적) scanner를 이해하고 활용하여 문제를 해결하는 것을 목표로 한다.

(1) 자판기 프로그램
조건1. 사용자가 볼 수 있게 메뉴를 표시한다.
- 다음과 같은 음료를 실행창에 표시한다.
- 사이다 1,700원
- 콜라 1,900원
- 식혜 2,500원
- 솔의눈 3,000원

조건2. 사용자는 음료를 선택할 수 있습니다.
- 사용자에게 어떤 음료를 살 것인지를 입력받는다.
- ex) 사이다
- 목록에 없는 음료일 경우 실행이 종료.

조건3. 사용자에게 얼마를 넣을지 입력받는다.
- ex) 2000
- 지불하는 금액이 선택한 음료의 비용보다 작다면 “돈이 부족합니다.” 를 출력한다.

조건4. 사용자는 음료를 구매하고 남은 잔액을 확인할 수 있다.
- 잔액을 화면에 표시한다.
- ex) 입력한 돈 2000원, 사이다 1700원 일때 300원을 잔액으로 보여준다.

(2) 실행코드

import java.util.Map;
import java.util.Scanner;

public class VendingMachine {
public static void main(String[] args) {
Map<String, Integer> beverages = Map.of(
"사이다", 1700,
"콜라", 1900,
"식혜", 2500,
"솔의눈", 3000
);

    System.out.println("음료 목록:");
    for (Map.Entry<String, Integer> beverage : beverages.entrySet()) {
        System.out.println("- " + beverage.getKey() + " " + beverage.getValue() + "원");
    }

    Scanner scanner = new Scanner(System.in);


    System.out.print("동전을 입력하세요: ");
    int coin = scanner.nextInt();


    System.out.print("구매할 음료의 이름을 입력하세요: ");
    String userChoice = scanner.next();


    if (beverages.containsKey(userChoice)) {
        System.out.println(userChoice + "의 가격은 " + beverages.get(userChoice) + "원입니다.");


        if (coin < beverages.get(userChoice)) {
            System.out.println("돈이 부족합니다.");
        } else {

            int remain = coin - beverages.get(userChoice);
            System.out.println(userChoice + "를 구매했습니다.");
            System.out.println("잔돈은 " + remain + "원입니다.");
        }
    } else {
        System.out.println("해당 음료는 없습니다.");
    }

    scanner.close();
}

}

(3) 해설

import java.util.Map;
import java.util.Scanner;

Map과 Scanner 클래스를 사용하기 위한 라이브러리를 생성한다. Map은 음료의 가격을 저장, Scanner는 사용자의 입력을 받기 위해 사용함.

Map<String, Integer> beverages = Map.of(
"사이다", 1700,
"콜라", 1900,
"식혜", 2500,
"솔의눈", 3000
);

Map을 사용해 음료의 이름과 가격을 저장한다.

for (Map.Entry<String, Integer> beverage : beverages.entrySet()) {
System.out.println("-" + beverage.getKey() + " " + beverage.getValue() + "원");
}

for문을 통해 루프하여 beverages 맵의 각 항목을 순회하고 getKey()는 음료의 이름,
getValue()는 가격을 반환하여 출력하는데 사용한다.

Scanner scanner = new Scanner(System.in);
위 선언을 통해 scanner의 객체를 생성한다.

int coin = scanner.nextInt();
동전을 입력받기 위해 정수형 변수를 coin에 저장한다.

String userChoice = scanner.next();
사용자에게 구매할 음료의 이름을 입력하라는 메시지를 출력한다.

if (beverages.containsKey(userChoice)) {
조건문을 통해 사용자가 입력한 음료의 이름을 문자열 변수 userChoice에 저장함.

System.out.println(userChoice + "의 가격은 " + beverages.get(userChoice) + "원입니다.");
음료 존재 여부를 확인하기 위해 사용자가 선택한 음료가 beverages 맵에 존재하는지 확인

if (coin < beverages.get(userChoice)) {
선택한 음료의 가격을 출력 동전이 부족할 경우 아래의 "돈이 부족합니다."를 출력하거나 " 를 구매했습니다.", "잔돈은 ~ 원입니다."를 출력하기 위한 조건을 생성한다.

scanner.close();
마지막으로 조건을 모두 완수하면 scanner 객체를 닫아 종료한다.

(4) 총평
scanner에 대한 이해 및 코드해석은 가능하였으나 실제로 구현한 적은 없어 오랜 시간이 걸렸다. 특히 scanner를 통해 받은 값을 map에 저장하는 것에 대한 익숙함이 부족하여 코드를 작성할 때 HINT를 많이 참고 하였다. 또한 조건문을 사용 할 때 산술 연산자를 사용하는 것 또한 아직 미숙하였다. 결론적으로 scanner문과 산술 연산자의 추가적인 학습이 필요로 할 것이다.

profile
반갑습니다.

0개의 댓글