스터디 모음/Java 스터디

[Java] 자바 기초 문법 확인해보기 -2 Scanner, print, if java

always-dev 2022. 7. 1.
반응형

자바 기초 문법 확인해보기 -2  Scanner, print, if  java

이번 시간은 두 번째 시간으로 다시 한번 Scanner, print, if를 사용해보려고 합니다 !

 

솔직히 지겨울 수도 있고.. 그만 할 때 되지 않았나 앂지만

아무리 기초라도 내 손에 익고 확실하게 하고 가는 편이 훨씬 좋다고 생각합니다.

이번 시간도 후회하지 않게 열심히 코드를 작성하겠습니다 ! 👏

 

 

1) 1번 문제

문제는 다음과 같습니다.

1-1) 요구사항

  • 철수와 영희는 용돈을 같이 사용합니다.
  • 철수와 영희는 이미 10,000원을 가지고 있습니다.
  • 철수와 영희는 시작과 동시에 추가 용돈을 받습니다.
  • 추가 용돈은 콘솔로 입력해줍니다.
  • 5가지 음식이 있습니다.
  • 5가지 음식 각각 콘솔로 가격을 입력받습니다.
  • 5가지 음식 순서대로 음식을 주문하게됩니다.
  • 각각 원하는 음식의 개수를 콘솔로 입력하게 됩니다.
  • 용돈이 충분할 경우 음식을 먹고 다음 음식점을 향하게 됩니다.
  • 음식점에서 용돈이 부족한 경우 단 한번만 추가 용돈을 또 받을 수 있습니다.
  • 추가 용돈을 받은 후에 다시 용돈이 부족한 상태가 생기면 프로그램이 종료됩니다.
  • 용돈이 부족한 경우에는 어떤 음식을 사는데 얼마가 부족한지 나와야합니다.
  • 음식을 구매한 후에 음식 값과 남은 용돈을 알려줘야합니다.

1-2) 구현

구현하는데 어려움은 없었습니다.

단지 객체를 사용하지 않으므로 절차형이기 때문에 중복되는 부분이 많습니다.

하지만 이러한 절차형 또한 필요한 경우가 있기에 이런 식으로도 구현할 줄 알아야한다고 생각합니다.

 

새로운 점이 있었다면

용돈이 부족하여 새로운 용돈을 추가적으로 받는 부분에서 만약에 이전에 이미 용돈이 부족해서 추가 용돈을 받았다면 받지않고 프로그램이 종료되어야하는 부분입니다.

용돈을 이미 추가적으로 지급되었는지 안되어있는지 알기 위해서는 boolean이나 int나 String 등으로 어떠한 값이 변경된 후에 이후 그 값이 변경되었으면 지급이 이미 된 상태임을 알리는 것입니다.

이 세션에서는 boolean을 사용하지 않기로 했으므로 저는 int를 사용하였습니다.

 

int를 사용할 때 0, 1과 같은 코드로 사용하지 않고

용돈을 실제적으로 받았을 때의 금액과

용돈을 실제 받지 않았을 때의 금액으로 나누어서 후에 비교했을 때 값이 같은 경우는

추가적으로 용돈을 받지 않았음을 의미하고

금액을 비교해서 값이 다를 경우에는 추가적으로 용돈을 받았음을 의미합니다.

 

아래 코드를 보면

originalPocketMoney가 있고 또한 pocketMoney가 있습니다.

돈이 부족해 추가적인 용돈을 받게 되면 pocketMoney만 증가하지 originalPocketMoney는 증가시키지 않았습니다.

때문에 후에 이 값을 비교하면 추가 용돈 지급 유무를 판별할 수 있습니다.

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

        int pocketMoney = 10000;

        System.out.println("철수와 영희는 " + pocketMoney + "원의 용돈을 가지고 있습니다.");
        System.out.print("철수와 영희 용돈을 추가해주세요 : ");
        pocketMoney += sc.nextInt();
        System.out.println("\\n현재 철수와 영희의 용돈 총금액 : " + pocketMoney);

        int ddukbbokiPrice = 0;
        int udongPrice = 0;
        int snackPrice = 0;
        int hamburgerPrice = 0;
        int pizzaPrice = 0;

        System.out.print("\\n떡볶이 금액을 입력해주세요 : ");
        ddukbbokiPrice = sc.nextInt();
        System.out.print("\\n우동 금액을 입력해주세요 : ");
        udongPrice = sc.nextInt();
        System.out.print("\\n과자 금액을 입력해주세요 : ");
        snackPrice = sc.nextInt();
        System.out.print("\\n햄버거 금액을 입력해주세요 : ");
        hamburgerPrice = sc.nextInt();
        System.out.print("\\n피자 금액을 입력해주세요 : ");
        pizzaPrice = sc.nextInt();

        int ddukbbokiCount = 0;
        int udongCount = 0;
        int snackCount = 0;
        int hamburgerCount = 0;
        int pizzaCount = 0;

        int originalPocketMoney = pocketMoney;

        System.out.print("\\n떡볶이를 몇개 주문하시겠습니까?");
        ddukbbokiCount = sc.nextInt();

        if (pocketMoney - ddukbbokiPrice * ddukbbokiCount < 0) {
            System.out.println(ddukbbokiPrice * ddukbbokiCount - pocketMoney + "원의 용돈이 부족합니다.");
            System.out.print("추가해줄 용돈을 입력해주세요 : ");
            pocketMoney += sc.nextInt();
            System.out.println("\\n현재 용돈은 " + pocketMoney + "원이 되었습니다.");
        }

        if (pocketMoney - ddukbbokiPrice * ddukbbokiCount > 0) {
            pocketMoney -= ddukbbokiPrice * ddukbbokiCount;
            originalPocketMoney -= ddukbbokiPrice * ddukbbokiCount;
            System.out.println("떡볶이는 총 " + ddukbbokiPrice * ddukbbokiCount + "원이었으며 현재 남은 용돈은 " + pocketMoney + "원 입니다.");

            System.out.print("\\n우동을 몇개 주문하시겠습니까?");
            udongCount = sc.nextInt();

            if (pocketMoney - udongPrice * udongCount < 0) {
                System.out.println("우동을 시켜먹기에 " + (udongPrice * udongCount - pocketMoney) + "원이 부족합니다.");
                if (originalPocketMoney != pocketMoney) {
                    System.out.println("이미 용돈을 추가적으로 받았습니다. 때문에 주인장한테서 쫓겨났습니다.");
                }
                if (originalPocketMoney == pocketMoney) {
                    System.out.print("추가해줄 용돈을 입력해주세요 : ");
                    pocketMoney += sc.nextInt();
                    System.out.println("현재 용돈은 " + pocketMoney + "원이 되었습니다.");
                }
            }
            if (pocketMoney - udongPrice * udongCount >= 0) {
                pocketMoney -= udongPrice * udongCount;
                originalPocketMoney -= udongPrice * udongCount;
                System.out.println("우동은 총 " + udongPrice * udongCount + "원이었으며 현재 남은 용돈은 " + pocketMoney + "원 입니다.");

                System.out.print("\\n과자을 몇개 주문하시겠습니까?");
                snackCount = sc.nextInt();

                if (pocketMoney - snackPrice * snackCount < 0) {
                    System.out.println("과자를 시켜먹기에 " + (snackPrice * snackCount - pocketMoney) + "원이 부족합니다.");
                    if (originalPocketMoney != pocketMoney) {
                        System.out.println("이미 용돈을 추가적으로 받았습니다. 때문에 주인장한테서 쫓겨났습니다.");
                    }
                    if (originalPocketMoney == pocketMoney) {
                        System.out.print("추가해줄 용돈을 입력해주세요 : ");
                        pocketMoney += sc.nextInt();
                        System.out.println("\\n현재 용돈은 " + pocketMoney + "원이 되었습니다.");
                    }
                }
                if (pocketMoney - snackPrice * snackCount >= 0) {
                    pocketMoney -= snackPrice * snackCount;
                    originalPocketMoney -= snackPrice * snackCount;
                    System.out.println("과자는 총 " + snackPrice * snackCount + "원이었으며 현재 남은 용돈은 " + pocketMoney + "원 입니다.");

                    System.out.print("\\n햄버거를 몇개 주문하시겠습니까?");
                    hamburgerCount = sc.nextInt();

                    if (pocketMoney - hamburgerPrice * hamburgerCount < 0) {
                        System.out.println("햄버거를 시켜먹기에 " + (hamburgerPrice * hamburgerCount - pocketMoney) + "원이 부족합니다.");
                        if (originalPocketMoney != pocketMoney) {
                            System.out.println("이미 용돈을 추가적으로 받았습니다. 때문에 주인장한테서 쫓겨났습니다.");
                        }
                        if (originalPocketMoney == pocketMoney) {
                            System.out.print("추가해줄 용돈을 입력해주세요 : ");
                            pocketMoney += sc.nextInt();
                            System.out.println("\\n현재 용돈은 " + pocketMoney + "원이 되었습니다.");
                        }
                    }
                    if (pocketMoney - hamburgerPrice * hamburgerCount >= 0) {
                        pocketMoney -= hamburgerPrice * hamburgerCount;
                        originalPocketMoney -= hamburgerPrice * hamburgerCount;
                        System.out.println("햄버거는 총 " + hamburgerPrice * hamburgerCount + "원이었으며 현재 남은 용돈은 " + pocketMoney + "원 입니다.");

                        System.out.print("\\n피자를 몇개 주문하시겠습니까?");
                        pizzaCount = sc.nextInt();

                        if (pocketMoney - pizzaPrice * pizzaCount < 0) {
                            System.out.println("피자를 시켜먹기에 " + (pizzaPrice * pizzaCount - pocketMoney) + "원이 부족합니다.");
                            if (originalPocketMoney != pocketMoney) {
                                System.out.println("이미 용돈을 추가적으로 받았습니다. 때문에 주인장한테서 쫓겨났습니다.");
                            }
                            if (originalPocketMoney == pocketMoney) {
                                System.out.print("추가해줄 용돈을 입력해주세요 : ");
                                pocketMoney += sc.nextInt();
                                System.out.println("\\n현재 용돈은 " + pocketMoney + "원이 되었습니다.");
                            }
                        }
                        if (pocketMoney - pizzaPrice * pizzaCount >= 0) {
                            pocketMoney -= pizzaPrice * pizzaCount;
                            originalPocketMoney -= pizzaPrice * pizzaCount;
                            System.out.println("피자는 총 " + pizzaPrice * pizzaCount + "원이었으며 현재 남은 용돈은 " + pocketMoney + "원 입니다.");
                        }

                    }
                }
            }
        }

    }
}
반응형

댓글