상세 컨텐츠

본문 제목

[TIL#6-2 내배캠 Chapter 2 프로그래밍 기초] 숙제1

내배캠/작업물

by DK9 2023. 10. 13. 17:23

본문

후....뒤지는 줄 알았다....

import java.util.Scanner;

public class HomeWork {

    public static void main(String[] args) {
        //입력창
        Scanner sc = new Scanner(System.in);
        //요리 제목
        System.out.println("요리 제목을 입력해주세요.");
        String titleInput = sc.nextLine();
        System.out.println("[요리 : " + titleInput + " ]");

        //별점 입력값 제한하기, 퍼센트 바꾸기
        while (true) {
            System.out.println("별점을 작성해주세요.");
            double starInput = sc.nextDouble();
            double starRate = starInput * 100 / 5.0;

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

        //요리 순서 항목 만큼 자동으로
        int i = 0;
        System.out.println("<요리 레시피>");
        sc.nextLine();
        while (true) {
            String howInput = sc.nextLine();
            System.out.println((i+1) + ". " + howInput);
            i++;
            if (howInput.equals("끝")) {
                break;
            }
        }
    }
}

1. Scanner를 처음 배우고 처음 써봤다. import를 먼저 하고 난 후  Scanner를 통해 입력하고 출력할 때 ~~.next( ) 를 쓰면 띄어쓰기로도 구분이 되므로 띄어쓰기를 하고 싶다면 ~~nextLine( )을 사용하면 된다. 그리고 다른 데이터타입으로 값을 받고 싶으면 ~~.nextDouble( ) 처럼 관련 메서드가 있으니 그걸 사용하면 된다.

 

2. 별점 입력 값 제한하기에서 굉장히 많은 시간을 소모했다. 반복문들이 있는데 """반복문 안에 있는 것들을 반복한다."""는 핵심을 잘 생각했어야했다. 구현하고 싶은 기능은

 1) 숫자를 입력하도록 한다(범위 0~5, 소수점 포함)

 2) 범위를 벗어날 시 경고문을 출력하고

 3) 다시 입력창을 보여준다

 4) 0~5 사이의 숫자를 받기 전까지 위의 동작을 반복한다 였다.

 이 과정을 반복하려면 '입력값을 받는 것' 또한 반복과정에 있는데 그것을 망각하고 반복문 바깥에 관련 코드를 작성해서 한참을 헤맸다. """반복문은 반복문 안에 있는 것들을 반복한다.""" 반복문 중 while문은 ( )안의 값이 참이면 계속해서 반복을 실행하니 목적을 달성하면 break를 통해서 while문을 벗어나자.

 

3. 마지막으로 요리 순서를 적는 것 부분이다. 이 부분은 요리 순서마다 자동으로 번호를 붙이고 작성하게끔 만들고 싶었다. 위의 코드처럼 작성을 마치고 나니 문제점이 생겼다. 요리 순서 1번 항목은 자동으로 계속 작성되었다. 즉 내가 작성할 수 있는 요리 순서는 2번부터였다.

 이유를 쉽게 표현하자면 스캔 타입을 변경하면 전에 사용한 찌꺼기가 스캐너에 남게 되기 때문이다.

 

그렇기에 위에서 설명하는 큐에 남은 찌꺼기들을 제거하려면

스캐너메소드이름.nextLine();

으로 청소하자. 찾은 자료에서는 nextInt >> nextLine의 경우에만 해당되는 것처럼 나왔는데, 데이터타입이 변환될 때 모두 해당되는 것 같다. 필자는 nextDouble >> nextLine의 경우에 해당한다.

 요리 순서 작성이 완료되면  .equals로 끝이라고 입력하면 해당 메서드를 종료하도록 했다.

관련글 더보기