상세 컨텐츠

본문 제목

[TIL#7 내배캠 Chapter 2 프로그래밍 기초] 숙제1 심화 학습

내배캠/작업물

by DK9 2023. 10. 15. 13:23

본문

import java.util.Scanner;

public class HomeWorkPrac {
    //입력 받기
        public static String Kinput() {
        Scanner sc = new Scanner(System.in);
        return sc.nextLine();
    }

    //요리 제목
    public static void Title() {
        System.out.println("요리 제목을 입력해주세요.");
        System.out.println("[요리 : " + Kinput() + " ]");
    }

    //별점과 퍼센트
    public static void Starate() {
        while (true) {
            System.out.println("별점을 작성해주세요");
            double snum = Double.parseDouble(Kinput());
            double rate = snum * 100 / 5;

            if (snum >= 0 && snum <= 5.0) {
                System.out.println("별점 : " + snum + " ( " + rate + "%)");
                break;
            } else {
                System.out.println("0~5 사이의 숫자를 입력해주세요.");
            }
        }
    }

    //요리방법
    public static void Howindex() {
        for (int i = 1; ; i++) {
            String how = Kinput();
            if (how.equals("끝")) {
                break;
            }
            System.out.println(i + ". " + how);
        }
    }

        public static void main (String[]args){
            Title();
            Starate();
            Howindex();
        }
    }

숙제를 만들면서 튜터님들께 질문을 했을 때 메서드를 만들어서 사용하는 게 제일 일반적인 방법이라는 말을 들었기에 작성해 보았다.

 

1. 입력값을 받는 것

 : Kinput 메서드를 String으로 만들었다. void형태로 해보려고 시도했었지만, 다른 메서드에 Kinput을 받아가는 코드를 필수적으로 작성해야 하는 번거로움이 있었다. 그래서 가장 깔끔한 형태가 String으로 하는 것이라고 생각해 코드를 작성했다. new Scanner(Systerm.in)을 sc에 대입하고 데이터 타입을 Scanner로 정의했다. 그리고 Kinput에게 sc.nextLine( ) 으로 돌려줬다.

 

2. 요리제목

 : 그냥 간단하게 sout했다.

 

3. 별점과 퍼센트

 : 처음에는 public static double로 만들려고 했는데, return값이 지저분해 보여서 void로 바꿨다. while문을 채택했다.

 String 값의 Kinput을 double로 형 변환을 하고 snum에 저장하고 snum을 이용해 퍼센트를 구해는 rate에 저장했다. 그리고 if문을 통해 0 <= snum <= 5 일 경우 snum과 rate를 표시하고 while을 break 한다.

 그 이외의 경우 0~5 사이의 숫자를 입력해 달라는 문구를 출력하고 다시 while문을 반복한다. 주의점은 반복문은 반복문 안에 있는 모든 작업을 반복한다는 것이고, 내가 구현하고자 하는 기능에는 값을 입력받는 것(Kinput) 또한 반복과정이기에 while문 안에 코드가 위치해야 한다는 것이다.

 

4. 요리 방법

 : for문을 채택했다. for문의 조건식을 공란으로 하고 ;을 찍어 생략할 수 있다는 것을 알게 되었다. for문을 끝내는 기준이 "끝"을 입력했을 때로 정하는 기능을 구현하는데 애를 먹었다. 왜냐하면 for문 안에 Kinput을 받는 값을 저장하는 코드( String how = Kinput( ); ) 이 부분이 없다면 엔터를 2번 쳐야지 다음 요리 순서를 입력할 수 있었기 때문이다. (처음에 는 이런 식으로 코드를 짰었다.)

틀린 코드

public static String Howindex() {
    String how = "";
    for (int i =1 ; ; i++) {
        System.out.println(i + ". " + Kinput());
        if (Kinput().equals("끝")) {
            break;
        }
    } return how;
}

 원인은 또 반복문이다. Kinput은 입력하고 엔터를 칠 때마다 새로운 Kinput값이 저장하도록 코딩되었다. 이 점을 생각하고 틀린 코드로 돌아와 보면 for문 안에는 sout에 있는 Kinput(A라고 칭하겠다.), if문 안에 있는 Kinput(B라고 칭하겠다.)이 있고 이 둘은 각각 다른 값을 저장한다. 그래서 첫 번째 입력&엔터는 A에 두 번째 입력&엔터는 B에 저장된다. 그래서 기술해 놓은 문제점이 발생한 것이다.

 이를 정답 코드처럼 String how = Kinput( ); 으로 따로 값을 저장해서 메서드 안에서 돌려야지 한 번의 입력&엔터로 잘 작동하게 된다.

 

 

 

 

관련글 더보기