while문 문제

김경한·2022년 10월 18일
0

java

목록 보기
13/15

문제

while문을 사용하여 만들기

[1.구구단 2.음식점 3.계산기 4.종료]
1. 2단만 나오는 구구단을 설정해주세요.
1-1 : 2단이 지속적으로 출력된다. 2x1 ~ 2x9
1-2 : 구구단 2단이 끝나면 다시 처음 메뉴[1.구구단 2.음식점 3.계산기 4.종료]로 다시 빠져나간다.
1-3 : 거기서 다시 1번을 누르면 또다시 구구단 2단이 나타난다.

  1. 음식점을 차릴 건데, 포스기에서 사용하는 코딩을 설정해주세요. [1.볶음밥 2.자장면 3.탕수육[소대 따로] 4.종료] 금액 본인이 설정.
    2-1 : 2번을 누르면 볶음밥, 자장면, 탕수육을 선택할 수 있게 만든다.
    2-2 : 그곳에서 탕수육을 누를 시.1.대[?원] 2.중[?원] 3.소[?원] 4.이전 메뉴로가 출력된다. 그리고 그곳에서 4번 이전메뉴를 선택할 시 다시 볶음밥 등을 선택할 수 있는 메뉴판이 나타난다.
    2-3 : 마찬가지로 종료버튼을 누르면 이전 메뉴로 빠져나가서 1.구구단 2.중국집 3.계산기 4.종료버튼이 뜨게 한다.
    2-4 : 단, 메인메뉴로 빠져나가고, 다시 중국집으로 들어가게 됐을 때 이전에 중국집에서 산 금액이 +되어서 합산되게 하시오.
    2-5 : 각 금액은 알아서 추가하시고, 각 메뉴마다 금액을 나타내시오.
    [2번 예시 : 볶음밥이 1천원짜리가 있다면 1천원이 추가되어, 종료버튼을 누르면 알아서 추가된 금액이 나오도록.]
    메뉴 금액은 최초 1회 입력받게 만들어주세요 >> 중국집 들어가는 순간 >> 다시 들어갈 땐 받지 않음.
    1.볶음밥.
    볶음밥 5000원이 추가되어 현재 12000[누적금액]원입니다.
  1. 계산기가 필요해요. 더하기와 빼기만 있으면 되는데 가능할까요?
    3-1 : 1.더하기 2. 빼기를 만든다. 빼기의 경우.
  2. 더하기 2.빼기
    선택 : 1
    첫 번째 숫자 : 10scanf
    두 번째 숫자 : 10scanf
    10+10=20

선택 : 2
첫 번째 숫자 : 30scanf
두 번째 숫자 : 100scanf
이런 경우;
"두 번재 숫자가 더 클 수 없습니다!!"
두 번째 숫자만 다시 입력받는다. 첫 번째 숫자보다 작을때 까지.

만약 이미 계산을 한 상태일 경우,
그 전에 계산된 금액이 나타나면서 더하거나 뺄 숫자를 입력할 수 있게 하시오.
예시 =
입력 : 3
계산기입니다.
1번 더하기 2번 빼기
선택 : 1
첫 번째 : 10
두 번째 : 20
10 + 20 = 30
[1.구구단 2.음식점 3.계산기 4.종료]
선택 : 3
1번 더하기, 2번 빼기
선택 : 1
두 번째 숫자 입력 : 50
30 + 50 = 80

  1. 종료
    4-1:종료버튼울 누를 시, 여태까지 합산된 금액이 얼마인지 알 수 있도록 나타내시오.
public class test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);


        // 음식 누적 값 받기 변수 지정
        int menuPrice = 0;

        // 음식 값을 받아주는 값
        int rice1 = 0;
        int noodle2 = 0;
        int tangs1 = 0;
        int tangm1 = 0;
        int tangh1 = 0;

        // 계산기 받아줄 합 변수
        int numplus = 0;


        while (true) {
            System.out.println("메뉴를 선택해주세요");
            System.out.println("1.구구단 2.음식점 3.계산기 4.종료");
            int num = sc.nextInt();

            if (num < 4) {
                // 구구단 2단 하고 종료 후 메뉴 다시 표출
                if (num == 1) {
                    System.out.println("구구단을 선택하셨습니다.");
                    int gugu = 2;
                    int dan = 1;
                    int gugudan = 0;

                    while (dan < 10) {
                        gugudan = gugu * dan;
                        System.out.println(gugu + "*" + dan + "=" + gugudan);
                        dan++;
                    }
                }
            }
                //음식점
                while (num == 2) {
                    if(rice1 == 0) {
                        System.out.println("중국집 포스기에 음식 값을 지정해주세요 ");
                        System.out.println("볶음밥 값을 입력해주세요 : ");
                        int rice = sc.nextInt();
                        rice1 += rice;
                        System.out.println("짜장면 값을 입력해주세요 : ");
                        int noodle = sc.nextInt();
                        noodle2 += noodle;
                        System.out.println("탕수육 값 지정해주세요 ");
                        System.out.println("탕수육 [소] 값을 입력해주세요 : ");
                        int tangs = sc.nextInt();
                        tangs1 += tangs;
                        System.out.println("탕수육 [중] 값을 입력해주세요 : ");
                        int tangm = sc.nextInt();
                        tangm1 += tangs;
                        System.out.println("탕수육 [대] 값을 입력해주세요 : ");
                        int tangh = sc.nextInt();
                        tangh1 += tangs;

                    }else{
                                System.out.println("음식을 선택해주세요");
                                System.out.println("1.볶음밥"+rice1+" 2.자장면"+noodle2+" 3.탕수육[소`중`대 따로] 4.종료");
                                int menuCh = sc.nextInt();
                                while(menuCh<4){
                                    if (menuCh ==1) {
                                        menuPrice+=rice1;
                                        System.out.println("볶음밥을 선택 하셨습니다.");
                                        System.out.println("볶음밥"+rice1+"추가되어 누적금액"+ menuPrice+ "원입니다.");
                                        break;
                                    }
                                    if (menuCh ==2) {
                                        menuPrice+=noodle2;
                                        System.out.println("자장면을 선택 하셨습니다.");
                                        System.out.println("자장면"+noodle2+"추가되어 누적금액"+ menuPrice+ "원입니다.");
                                        break;
                                    }
                                    if (menuCh == 3) {
                                        System.out.println("탕수육을 선택 하셨습니다.");
                                        System.out.println("1.대["+tangh1+"원] 2.중["+tangm1+"원] 3.소["+tangs1+"원] 4.이전 메뉴");
                                        int tangtang = sc.nextInt();
                                            while(tangtang !=4){
                                                if (tangtang==1) {
                                                    menuPrice += tangh1;
                                                    System.out.println("탕수육 대자"+tangh1+" 선택하셨습니다. 누적금액 : "+ menuPrice);
                                                    break;
                                                }
                                                if (tangtang==2) {
                                                    menuPrice += tangm1;
                                                    System.out.println("탕수육 중자"+tangm1+" 선택하셨습니다. 누적금액 : "+ menuPrice);
                                                    break;
                                                }
                                                if (tangtang==3) {
                                                    menuPrice += tangh1;
                                                    System.out.println("탕수육 소자"+tangs1+" 선택하셨습니다. 누적금액 : "+ menuPrice);
                                                    break;
                                                }


                                            }
                                            if(tangtang == 4){
                                                System.out.println("이전으로 되돌아 갑니다. ");
                                                break;
                                            }


                                            }


                                    if (menuCh==4) {
                                        System.out.println("종료합니다.");
                                        break;
                                    }

                                        }

                        if (menuCh==4) {
                            System.out.println("종료합니다.");
                            break;
                        }


                        }
                    }



                    //계산기
                    if (num == 3) {
                        System.out.println("계간기를 선택하셨습니다.");
                        System.out.println("더하기 빼기를 선탯해주세요\n" +
                                "1.더하기 2.빼기");
                        int pm = sc.nextInt();
                        if (numplus == 0) {


                            // 더하기
                            if(pm ==1){
                                System.out.println("더하기를 선택하셨습니다.");
                                System.out.println("더하기 빼기 하실 숫자 2개를 입력해주세요");
                                int c1 = sc.nextInt();
                                int c2 = sc.nextInt();
                                numplus += (c1+c2);
                                System.out.println(c1 +"+"+ c2 +"="+ numplus  );
                            }
                            //빼기
                            if (pm ==2) {
                                System.out.println("빼기를 선택 하셨습니다.");
                                    System.out.println("더하기 빼기 하실 숫자 2개를 입력해주세요");
                                    int c1 = sc.nextInt();
                                    int c2 = sc.nextInt();
                                    while (true) {
                                        if (c1 < c2) {
                                            System.out.println("첫번째 숫자보다 두번째수가 더 작아야 합니다 다시 입력해주세요 : ");
                                            c2 = sc.nextInt();
                                        }else if (c2==c1) {
                                            System.out.println("첫번째 숫자보다 두번째수가 더 작아야 합니다 지금 수가 같아 작동 불가 ");
                                            break;
                                        } else  {
                                            numplus+=(c1-c2);
                                            System.out.println(c1 +"-"+ c2 +"="+ numplus  );
                                            break;
                                        }

                                    }

                            }
                        }else{
                            System.out.println("더하기 빼기 할 값 한개를 적어주세요");
                             int c2 = sc.nextInt();
                            if(pm ==1){
                                System.out.println("더하기를 선택하셨습니다.");
                                numplus += c2;
                                System.out.println(numplus +"+"+ c2 +"="+ numplus  );
                            }
                            if (pm ==2) {
                                System.out.println("빼기를 선택 하셨습니다.");
                                numplus+=numplus-c2;
                                System.out.println(numplus +"-"+ c2 +"="+ numplus  );
                            }

                        }

                    }
                    if(num == 4){
                        System.out.println("종료합니다.");
                        System.out.println("음식값 ["+menuPrice+"]"+"계산기 누적 합["+numplus+"]");
                        break;
            }


            }


        }

    }

문제 풀이

여기서 핵심음 음식 값이나 아니면 기존 계산기에서 누적값을 어떻게 받아서 처리 하냐인거 같았다 또 다른 하나의 핵심은 break;문을 사용하여 내가 사용 하는 무에서 빠져 나오는 타이밍이였다
1. 누적값을 만들어 누적된 값이 없으면 처음 입력 값을 받는게 핵심
2. break; 문을 사용하여 지금 진행 하는 문에 탈출을 정확하게 인지 하고 있어 야 한다.
3. while문과 if 문을 적재적소에 사용하는것도 중요하나 while문 및 if문을 사용을 최소하로 생각해야 한다는 생각으로 진행 해 주어야 한다.

문제를 풀때 if, while문을 너무 많이 남발 하여 코드가 많이 꼬였다 그래서 처음부터 큰틀을 잡을때 노트로 정리를 하고 큰틀을 잡고 그 안에 들어갈 내용들도 간단하게 손코딩하여 코드를 꼬이지 않게 작성하는게 중요 한거 같다. 나같은경우 아이패드에 노트 하면서 차근히 처음부터 풀어봐서 풀수 있었던거 같다.

profile
마스터 요다의 광선검

0개의 댓글