문제

  1. 사용자가 볼 수 있게 메뉴를 표시합니다.
    • 다음과 같은 음료를 실행창에 표시합니다.
      • 사이다 1,700원
      • 콜라 1,900원
      • 식혜 2,500원
      • 솔의눈 3,000원
  2. 사용자는 음료를 선택할 수 있습니다.
    • 사용자에게 어떤 음료를 살 것인지를 입력받습니다.
      • ex) 사이다
      • 목록에 없는 음료일 경우 실행이 종료됩니다.
  3. 사용자는 지불할 금액을 입력할 수 있습니다.
    • 사용자에게 얼마를 넣을지 입력받습니다.
      • ex) 2000
      • 지불하는 금액이 선택한 음료의 비용보다 작다면 “돈이 부족합니다.” 를 출력합니다
  4. 사용자는 음료를 구매하고 남은 잔액을 확인할 수 있습니다.
    • 잔액을 화면에 표시합니다.
      • ex) 입력한 돈 2000원, 사이다 1700원 일때 300원을 잔액으로 보여줍니다.

풀이 과정

1. 음료와 금액을 구분지어 변수에 저장해야 사용자가 입력한 값과 비교하여 프로그램을 실행할 수 있기 때문에, 2차원 배열에 음료와 금액을 따로 저장한다.

2. 반복문을 사용해서 사용자가 입력한 값과 각 배열의 값을 비교한다.

 2-1. 만약 배열에 입력한 값이 존재하지 않으면 종료한다.

 2-2. 입력값과 배열의 음료명이 일치할 때 해당 인덱스의 금액값을 반환한다.

3. 조건문을 사용해서 사용자가 입력한 값과 2-2에서 반환한 값을 비교한다.

 3-1. 입력한 값이 반환된 값보다 작으면 "돈이 부족합니다"를 출력한다.

 3-2. 입력한 값이 반환된 값보다 크면 연산으로 잔액을 출력한다.

 

 

  • 2번 단계에서 이슈 발생 -> 해결

https://go-getter1kim.tistory.com/42

 

[Java] for-each문에 2차원 배열 사용 이슈

목적음료의 이름과 금액 목록이 2차원 배열로 저장되어 있는 `drinks`와 사용자가 입력한 음료의 이름을 저장한 `drink`를 for-each문으로 비교하고, `drinks` 각 행의 첫 번째 값인 음료 이름과 `drink`가

go-getter1kim.tistory.com

 

 

  • 3번 과정에서 주의할 점
    • 두 값을 비교할 때, `equals` 함수 사용
    • `a.equals(b)`
    • == 연산자로 비교하는 C언어와 혼동하지 말 것

 

결과물

import java.util.Scanner;

public class vendingMachine {
    public static void main(String[] args){
        String [][] drinks= new String [][]{{"사이다", "1700"}, {"콜라", "1900"}, {"식혜", "2500"}, {"솔의눈", "3000"}};
        System.out.println(drinks);
        
        Scanner scanner = new Scanner(System.in);

        System.out.println("음료를 선택하세요");
        String drink = scanner.nextLine();
        int price = 0;

        for(int i=0;i<drinks.length;i++){
            if(drinks[i][0].equals(drink)) {
                price = Integer.valueOf(drinks[i][1]);
                System.out.println(price);
                break;
            }
        }
        
        System.out.println("금액을 입력하세요");
        int pay = scanner.nextInt();
        if(pay>=price) System.out.println("잔액: " + (pay-price));
        else System.out.println("금액이 부족합니다.");

        scanner.close();
    }
}