2023.10.12.<계산기Pj>next()와 nextLine() 메소드의 차이

2023. 10. 12. 21:10콛/Til

내일배움캠프에서 자바 기초강의 1주차를 다 들은 뒤 과제를 하는 과정에 있어서 이상한 점을 발견했다.

일단 과제는 Scanner 클래스의 기본적인 활용을 통해 풀어나가는 것 같다는 생각이 드는 과제였다.

💁‍♀️ **요리 레시피 메모장 만들기**

- 입력값
    - 내가 좋아하는 요리 제목을 먼저 입력합니다.
    - 요리 별점을 1~5 사이의 소수점이 있는 실수로 입력해주세요. (ex. 3.5)
    - 이어서 내가 좋아하는 요리 레시피를 한 문장씩 10문장을 입력합니다.
- 출력값
    - 입력이 종료되면 요리 제목을 괄호로 감싸서 먼저 출력 해줍니다.
    - 이어서, 요리 별점을 소수점을 제외한 정수로만 출력해줍니다. (ex. 3)
    - 바로 뒤에 정수별점을 5점만점 퍼센트로 표현했을 때 값을 실수로 출력해줍니다. (ex. 60.0%)
    - 이어서, 입력한 모든 문장 앞에 번호를 붙여서 모두 출력 해줍니다.

 

1. 내가 작성한 첫 코드

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        Scanner title = new Scanner(System.in);
       
        String input = title.next();
        double doublestar = 3.5;
        
        Scanner recipe = new Scanner(System.in);
        String input1 = recipe.next();
        String input2 = recipe.next();
        String input3 = recipe.next();
        String input4 = recipe.next();
        String input5 = recipe.next();
        String input6 = recipe.next();
        String input7 = recipe.next();
        String input8 = recipe.next();
        String input9 = recipe.next();
        String input10 = recipe.next();

        System.out.println("[" +input+"]");

        int intstar = (int)doublestar;
        System.out.println(intstar);

        double star = intstar / 5.0;
        System.out.println("별점 : "+intstar +"("+star * 100+"%)");

        System.out.println("1"+ input1);
        System.out.println("2"+ input2);
        System.out.println("3"+ input3);
        System.out.println("4"+ input4);
        System.out.println("5"+ input5);
        System.out.println("6"+ input6);
        System.out.println("7"+ input7);
        System.out.println("8"+ input8);
        System.out.println("9"+ input9);
        System.out.println("10"+ input10);
    }
}

2. 문제점 

이렇게 입력시 다른 부분은 정상적으로 리턴되지만 레시피를 입력하는 과정에 있어서 띄어쓰기마다 끊어지며 다음 인풋에 영향을 끼치게 되었다.

 

왜일까? 출력하는쪽에서는 문제 없으니 받는 쪽이 문제일거다!

 

3.해결방법

구글링 결과  Scanner 클래스의 next()와 nextLine() 메소드의 차이였다.

- next () 메소드는 스페이스(공백전)의 문자열을 리턴해주는 것이고 

- nextLine() 메소드는 엔터를 치기 전까지 쓴 문자열을 리턴해주는 것이다. 

- next()부분을 모두 nextLine()으로 바꾸고 다시 입력해보니 문제없이 잘 출력되는 것을 볼 수 있었다.

 

더보기

야호~!! 오늘하루 끝! 내일만 지나면 주말!! 에도 공부할거긴 한데 어쨋든..