Java-TIL(24.04.24 수)

·2024년 4월 25일

어제 너무 바빠서 TIL 작성을 못했어서 지금이라도 작성한다!

어제 1주차 강의를 전부 들었다. 아는 내용이 대부분이었지만 중간중간 처음 듣는 것들도 나와있어서 열심히 집중해서 들었던 것 같다.

자바의 역사부터 JVM, JRE, JDK에 대해 배웠고, 주석 다는 것과 변수(기본형, 참조형, 래퍼클래스타입), 숫자와 문자(아스키코드), 형변환(자동, 강제)에 대해 배웠다.

https://teamsparta.notion.site/Java-1-JVM-b9e8f6c744b242c59aa2c39d72a56102

C를 오래하다보니 C문법에 익숙해져 있는데, 하루 빨리 JAVA에 익숙해질 수 있도록 해야겠다.

1주차 과제를 하며 의문인 점이 있었다.

버퍼에 대한 개념을 다루지 않았는데 버퍼를 쓰지 않으면 풀기 어려운 문제를 낸 것이다.


public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        String title = sc.nextLine();
        float rate = sc.nextFloat();
        int intrate = (int)rate;

        sc.nextLine(); //버퍼에 있는 엔터 빼주기~(없으면 input1에 개행들어감~)

        String input1 = sc.nextLine();
        String input2 = sc.nextLine();
        String input3 = sc.nextLine();
        String input4 = sc.nextLine();
        String input5 = sc.nextLine();
        String input6 = sc.nextLine();
        String input7 = sc.nextLine();
        String input8 = sc.nextLine();
        String input9 = sc.nextLine();
        String input10 = sc.nextLine();

        System.out.println("[" + title + "]");
        System.out.println("별점  : " + intrate + " (" + (double)intrate * 1/5 * 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);
    }
}

nextFloat을 쓰면 4.5\n 을 입력했을 때 4.5까지만 읽고 \n은 읽지 않기때문에 input1로 \n이 넘어가면서 문장이 씹히게 된다.
이를 방지하기 위해 nextline()을 추가로 하나 넣어주어 버퍼에 있는 \n을 빼주어야 올바르게 작동한다.

다른 풀이방법은 없었을까, 버퍼를 이용하지 않고 nextLine만을 사용하여 풀 수는 없었을까 하고 고민하고 구글링을 해보았다.

만약 nextFloat을 사용하지 않고, 똑같이 nextLine을 사용하도록 하여 버퍼문제를 신경안쓰게 하고싶다면, nextLine으로 점수를 문자열로 입력을 받은 후, 공백 제거 후 float 변수에 대입을 하여 문제를 해결할 수 있다.

Float.parseFloat(rateStr.trim())을 사용하여 문제를 해결 할 수 있었다. 문자열을 float 형으로 변환할 수 있다. trim()메소드를 이용하여 앞 뒤에 불필요한 공백이 있다면 없애주어 숫자 변환에 적합한 형태로 만들 수 있었다.

실제로 여러 테스트 값이 들어간다면 throw exception을 해주어야했겠지만, 나중에 해당 범위 강의를 듣게된다면 쓰도록 해보아야겠다.

아래 코드가 그 예시이다.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        String title = sc.nextLine();

        String rateStr = sc.nextLine(); // 점수를 문자열로 입력 받기

        float rate = 0;

        rate = Float.parseFloat(rateStr.trim()); // 문자열을 공백 제거 후 부동 소수로 변환

        int intrate = (int)rate;

        String input1 = sc.nextLine();
        String input2 = sc.nextLine();
        String input3 = sc.nextLine();
        String input4 = sc.nextLine();
        String input5 = sc.nextLine();
        String input6 = sc.nextLine();
        String input7 = sc.nextLine();
        String input8 = sc.nextLine();
        String input9 = sc.nextLine();
        String input10 = sc.nextLine();

        System.out.println("[" + title + "]");
        System.out.println("별점  : " + intrate + " (" + (double)intrate * 1/5 * 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);
    }
}
profile
응애개발자

0개의 댓글