본문 바로가기
스파르타 내일배움캠프/TIL(Today I learned)

25.02.06 사전캠프 TIL - 스파르타 자판기

by pandastic 2025. 2. 6.
반응형

Lv2. 스파르타 자판기

 

1. 사용자가 볼 수 있게 메뉴를 표시

 

사이다 - 1700원 와 같은 방식으로 값을 연결시키려면 사이다를 key값, 1700원을 value값으로 설정해줘야한다.

Java에서는 Map을 이용하여 Key, Value 값을 연결한다.

https://docs.oracle.com/en/java/javase/22/docs/api/java.base/java/util/Map.html

 

Map (Java SE 22 & JDK 22)

JavaScript is disabled on your browser. Nested Class Summary Nested Classes static interface  A map entry (key-value pair). Method Summary All MethodsStatic MethodsInstance MethodsAbstract MethodsDefault Methods void Removes all of the mappings from this

docs.oracle.com

https://docs.oracle.com/en/java/javase/22/docs/api/java.base/java/util/HashMap.html

 

HashMap (Java SE 22 & JDK 22)

JavaScript is disabled on your browser. Nested Class Summary Nested classes/interfaces declared in interface java.util.Map Map.Entry Constructor Summary Constructors Constructs an empty HashMap with the default initial capacity (16) and the default load f

docs.oracle.com

 

https://wikidocs.net/208

 

03-08 맵

사람을 ‘이름 = 홍길동’, ‘생일 = 몇 월 며칠’ 등으로 구분할 수 있듯이 맵(Map) 은 대응 관계를 쉽게 표현할 수 있게 해주는 자료형이다. > 맵은 다른 언어에도 있는…

wikidocs.net

Map은 인터페이스에 해당하기 때문에 객체 생성을 할 수 없다. 그래서 Map의 자료형 중 하나인 HashMap을 사용하여 Key, Value 값을 담는다.

 

Map<String, Integer> map = new HashMap<>();
        map.put("사이다", 1700);
        map.put("콜라", 1900);
        map.put("식혜", 2500);
        map.put("솔의 눈", 3000);
        for (Entry<String, Integer> list : map.entrySet()) {           
            System.out.println(list.getKey() + " " + list.getValue());        
        }

map.put() 을 이용하여 Key와 Value값을 담을 수 있다.

 

사용자가 메뉴를 볼 수 있도록 for Each문과 entrySet()을 사용하여 Key, Value 값을 가져온다.

아래 블로그를 참고하였다.

https://itstudy402.tistory.com/25

 

JAVA - Map 전체 내용 꺼내기 (entrySet, keySet)

자바 개발을 하다 보면 Map을 사용하여 데이터를 보관하고 관리하는 경우가 매우 많습니다. Map에 중복되지 않는 key값으로 데이터를 넣고 데이터를 꺼낼 때는 key값을 가지고 value를 찾아옵니다.

itstudy402.tistory.com

 

 

2. 사용자의 음료 선택

 

사용자가 어떤 음료를 살 것인지 입력 받고, 목록에 없는 음료일 경우 실행을 종료한다.

Scanner sc = new Scanner(System.in, "euc-kr");
        System.out.print("마실 음료수를 골라주세요 : ");
        String drink = sc.nextLine();
    
        int price = 0;
        int pay = 0;
        
	// 음료수 비교
        if(map.containsKey(drink)){
            price = map.get(drink);
        }else{
            sc.close();
            return ;
        }

입력을 받을 때는 Scanner를 사용한다. System.in 뒤에 "euc-kr"을 붙였는데, 한글을 입력했을 때 한글이 ???로 뜨는 이슈가 있어서 인코딩 방식을 지정해주었다.

 

Map의 key값에 입력한 음료수가 들어있는지 체크하기 위해 containsKey()를 사용하였다.

있을 경우, 입력한 음료수와 일치하는 key값의  value 값을 가져온다.

없을 경우, return ; 을 사용하여 프로그램을 종료시킨다.

 

containsKey()는 이 블로그를 참고하였다.

https://hoehen-flug.tistory.com/26

 

[Java] HashMap에 특정 key가 존재하는지 확인하기

HashMap에서 특정 key가 존재하는지를 확인해야 할 때가 있다. 이 때는 2가지 방법이 있다. Map.containsKey() Map.get() 하단에서 설명하겠지만 두 가지 방법 중 첫번째 방법인 Map.contatinsKey() 메서드를 사용

hoehen-flug.tistory.com

 

 

3. 사용자는 지불할 금액을 입력.

 

사용자가 얼마를 넣을건지 입력하고, 음료값보다 넣은 돈이 적다면 "돈이 부족합니다" 출력/ 많다면 잔액 출력.

 

System.out.print("지불할 금액을 입력해주세요 : ");
pay = sc.nextInt();
int bal = pay - price;
if(pay < price){
    System.out.println("돈이 부족합니다.");
}else if(pay > price){
    System.out.println(bal + "원 남았습니다.");
}    
sc.close();

bal 이라는 변수를 만들어서 지불할 금액 - 음료수 가격 = 잔액 값을 구하는 식을 작성한다.

 

if문을 사용하여 음료수 가격이 지불할 금액보다 클 경우, 돈이 부족하다는 문구를 출력한다.

지불할 금액이 음료수 가격보다 클 경우, 위에 구한 잔액 값을 출력해주면 된다.

 

 

 

최종 코드

import java.util.*;
import java.util.Map.Entry;
import java.util.HashMap;
class Main {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("사이다", 1700);
        map.put("콜라", 1900);
        map.put("식혜", 2500);
        map.put("솔의 눈", 3000);
        for (Entry<String, Integer> list : map.entrySet()) {           
            System.out.println(list.getKey() + " " + list.getValue());        
        }
        Scanner sc = new Scanner(System.in, "euc-kr");
        System.out.print("마실 음료수를 골라주세요 : ");
        String drink = sc.nextLine();
    
        int price = 0;
        int pay = 0;
        if(map.containsKey(drink)){
            price = map.get(drink);
        }else{
            sc.close();
            return ;
        }
        System.out.print("지불할 금액을 입력해주세요 : ");
        pay = sc.nextInt();
        int bal = pay - price;
        if(pay < price){
            System.out.println("돈이 부족합니다.");
        }else if(pay > price){
            System.out.println(bal + "원 남았습니다.");
        }    
        sc.close();
    }
}
반응형