본문 바로가기

JAVA

[내일 배움 캠프, JAVA 달리기 반]

1. 문제

 

- 정보를 효율적으로 저장하기 위해서 음료수와 가격을 함께 저장할 수 있는 딕셔너리를 활용해야 한다.

- 입력을 받아야 하므로 Scanner 클래스로 scanner 인스턴스를 활용해야 한다

- 조건에 따라 다른 출력과 과정을 진행해야 하므로 조건문을 활용해야 한다.

 


 

2. 풀이

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

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

        Scanner scanner = new Scanner(System.in);

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

        System.out.print("음료를 입력해주세요 : ");
        String userChoice = scanner.nextLine();
        if (!beverages.containsKey(userChoice)) return;

        System.out.print("제시할 돈을 입력해주세요 : ");
        int money = scanner.nextInt();
        if (money < beverages.get(userChoice)) {
            System.out.println("돈이 부족합니다.");
        }
        else {
            int rest = money - beverages.get(userChoice);
            System.out.println("제시한 돈 : " + money + "원");
            System.out.println("남은 돈 : " + rest + "원");
        }
    }
}

- Java에서 딕셔너리는 HashMap을 통해서 구현이 된다는 것을 몰라서 문제에서 제공하는 힌트를 통해 풀었다.

(Map에 대해 궁금한 것이 많아서 추가적으로 공부하면서 아래에 정리하였다.)

 


 

3. Map.of()

1. 불변(Immutable) Map을 생성 (수정 ❌, 삭제 ❌, 추가 ❌)

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

drinks.put("솔의눈", 2800); // ❌ UnsupportedOperationException 발생!
drinks.remove("콜라"); // ❌ UnsupportedOperationException 발생!
drinks.replace("사이다", 1800); // ❌ UnsupportedOperationException 발생!

 

 

 

2. 사용최대 10개까지의 키-값 쌍을 지원  (11개 이상 저장하려면 Map.ofEntries() 사용)

import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Map<String, Integer> bigMap = Map.ofEntries(
                Map.entry("콜라", 1900),
                Map.entry("사이다", 1700),
                Map.entry("식혜", 2500),
                Map.entry("솔의눈", 3000),
                Map.entry("밀크티", 3500),
                Map.entry("커피", 2000),
                Map.entry("녹차", 1800),
                Map.entry("홍차", 2200),
                Map.entry("라떼", 4000),
                Map.entry("아이스티", 2300),
                Map.entry("에너지드링크", 2700) // 11번째 요소
        );

        System.out.println(bigMap);
    }
}

 

 

 

3. Null 키나 Null 값 저장 불가 (NullPointerException 발생)

Map.of("콜라", null); // ❌ NullPointerException 발생!
Map.of(null, 1900); // ❌ NullPointerException 발생!

 

 

※ Map에 대한 추가적인 공부는 더 하였지만, 가독성을 위해서 따로 정리하였다. 

https://kimyongjun0129.tistory.com/82

 


 

4. Scanner 클래스

scanner 클래스는 Java에서 입력 받을 때 사용하는 클래스 중 하나이다.

 

 

import java.util.Scanner;

java.util 패키지에 속해 있어 위와 같이 import 시킬 수 있다.

 

 

1. scanner 객체 생성

import java.util.Scanner;  // Scanner 클래스 가져오기

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);  // Scanner 객체 생성
    }
}

Scanner를 사용하려면 우선 객체를 생성해야 한다.

 

 

2. 메서드

메서드 설명
next() 공백 전까지 한 단어 입력받음
nextLine() 한 줄을 입력받음 (Enter 포함)
nextInt() 정수(int) 입력받음
nextDouble() 실수(double) 입력받음
nextBoolean() true 또는 false 입력받음
nextLong() long 타입 입력받음
nextFloat() float 타입 입력받음

Scanner 클래스에는 다양한 데이터 타입을 입력받을 수 있는 메서드가 존재한다.

 

 

3. 예제 코드

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.print("이름을 입력하세요: ");
        String name = sc.nextLine(); // 문자열 한 줄 입력

        System.out.print("나이를 입력하세요: ");
        int age = sc.nextInt(); // 정수 입력

        System.out.println("이름: " + name + ", 나이: " + age);

        sc.close(); // Scanner 닫기
    }
}