241011 형변환과 숙제

물고기가자라면어그로·2024년 10월 11일
0

형변환

다양한 변수의 데이터타입이 있는만큼 형변환도 자주 이루어지는데 이 때의 형변환은 앞에 (데이터타입)을 적어주는 식으로 이루어진다. 그리고 숫자에서 문자로 문자에서 숫자로 형변환이 될 때는 아스키 코드를 사용한다.

예를 들어 이런 식이다.

//정수->문자
char A = (char)정수변수명

//정수->실수
double B = (double)정수변수명

//실수->정수
int C = (int)실수변수명

숙제

1주차의 숙제는 요리 레시피 메모장 만들기였는데
중간에 실수가 포함된 여러 줄의 입력을 하고 이를 한 줄씩 출력하는 것이었다.
예를 들어 첫 줄은 제목, 두 번째 줄은 평점(이때 실수로 입력받아 정수로 출력), 세 번째 줄부터는 레시피를 10줄 입력해서 앞에 인덱스(1., 2., ...) 를 붙이는 식이다.

처음에는 쉽게 될 줄 알고 코드를 작성했는데 문제가 생겼다.


import java.util.Scanner;

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

        Scanner sc = new Scanner(System.in);
        String title = sc.nextLine();

        double star = sc.nextDouble();
        String n1 = sc.nextLine();
        String n2 = sc.nextLine();
        String n3 = sc.nextLine();
        String n4 = sc.nextLine();
        String n5 = sc.nextLine();
        String n6 = sc.nextLine();
        String n7 = sc.nextLine();
        String n8 = sc.nextLine();
        String n9 = sc.nextLine();
        String n10 = sc.nextLine();


        int intstar = (int)star;

        System.out.println("[ "+title+" ]");
        System.out.println("별점 : " + intstar + " ("+intstar*20 + "%)");
        System.out.println("1. "+n1);
        System.out.println("2. "+n2);
        System.out.println("3. "+n3);
        System.out.println("4. "+n4);
        System.out.println("5. "+n5);
        System.out.println("6. "+n6);
        System.out.println("7. "+n7);
        System.out.println("8. "+n8);
        System.out.println("9. "+n9);
        System.out.println("10. "+n10);
    }
}

출력을 하니 이렇게 첫 번째 줄의 레시피가 공백으로 뜨고 그 다음부터 입력돼서 레시피 입력을 9번째 줄까지밖에 못하는 것이었다.

왜지? 코드를 보니 걸릴만한 부분이 입력부분에서 문자열 입력sc.nextLine()사이에 실수 입력 인풋sc.nextDouble()이 있다는 것 뿐이었다.
그래서 이 sc.nextLine() 의 Line이 문제인가 싶어
sc.nextLine()sc.next()의 차이를 검색해 보기로 했다.

nextLine()과 next()의 차이

쉽게 말하면 next()는 공백을 기준으로 한 단어씩 입력받고
nextLine()은 엔터를 기준으로 한 줄씩 입력을 받는다.

next()는 개행문자(\n)를 포함하지 않고 nextLine()은 개행문자(\n)를 포함한다.


그래서 나는 오류가 위의 것이었다.
sc.nextDouble()를 사용해서 숫자를 입력하면 개행문자를 포함하지 않고 가져오기때문에 뒤의 \n가 남게 된다.
이 때, 바로 다음 줄의 sc.nextLine()가 이 남은 \n를 입력받아 넘겨버리기 때문에 한 줄의 공백이 생겨버리는 것이었다.

이를 해결하기 위해 나는 중간에 한 줄의 sc.nextLine()를 넣어 저 남는 \n를 없애어 문제를 해결했다.


import java.util.Scanner;

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

        Scanner sc = new Scanner(System.in);
        String title = sc.nextLine();

        double star = sc.nextDouble();
        String skip = sc.nextLine();
        String n1 = sc.nextLine();
        String n2 = sc.nextLine();
        String n3 = sc.nextLine();
        String n4 = sc.nextLine();
        String n5 = sc.nextLine();
        String n6 = sc.nextLine();
        String n7 = sc.nextLine();
        String n8 = sc.nextLine();
        String n9 = sc.nextLine();
        String n10 = sc.nextLine();


        int intstar = (int)star;

        System.out.println("[ "+title+" ]");
        System.out.println("별점 : " + intstar + " ("+intstar*20 + "%)");
        System.out.println("1. "+n1);
        System.out.println("2. "+n2);
        System.out.println("3. "+n3);
        System.out.println("4. "+n4);
        System.out.println("5. "+n5);
        System.out.println("6. "+n6);
        System.out.println("7. "+n7);
        System.out.println("8. "+n8);
        System.out.println("9. "+n9);
        System.out.println("10. "+n10);
    }
}

0개의 댓글