부트캠프/문제해결

[문제해결] - Java문법 종합반 1주차 숙제

purple95 2024. 7. 22. 17:45

 

문제가 발생한 부분

 

요리 별점을 1~5 사이의 소수점을 포함한 숫자로 입력받고, 요리 별점을 소수점을 제외한 별점으로 출력

double point = sc.nextDouble();

우선은 소수점이 포함된 숫자를 입력받아야했으니 nextDouble()을 이용해 숫자를 불러왔고 

추후에 (int) point 로 명시적 형 변환을 사용한 뒤

이어서 nextLine()을 호출 하며 진행할 예정이었다.

다만, 문제가 발생했는데, 한줄이 출력이 안되는 상황이 발생  원인은 다음과 같았다.

 

  • java Scanner.nextDouble()는 사용자 입력의 가장 마지막 개행문자(엔터 등) 입력 전까지만 입력받습니다.
  • 마지막 개행문자를 제거하지 않기때문에 마지막에 입력된 개행문자는 아직 버퍼에 남아있습니다.
  • 즉, nextDouble()사용후 남아있는 개행문자가 다음 호출된 Scanner.nextLine()의 입력으로 처리되기 때문에 문제가 발생하는것.

따라서 그 해결법 중 하나로 숫자를 nextLine()으로 입력받은 뒤 타입 캐스팅을 진행시켜주며 해결했다.

int point = (int) Double.parseDouble(sc.nextLine());
double point_percentage = point * 100 / 5.0;

 

 

작성한 풀이

 

import java.util.Scanner;

//TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or
// click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter.
public class Main {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        System.out.println("[ " + sc.nextLine() + " ]");

        int point = (int) Double.parseDouble(sc.nextLine());
        double point_percentage = point * 100 / 5.0;

        String str_1 = sc.nextLine();
        String str_2 = sc.nextLine();
        String str_3 = sc.nextLine();
        String str_4 = sc.nextLine();
        String str_5 = sc.nextLine();
        String str_6 = sc.nextLine();
        String str_7 = sc.nextLine();
        String str_8 = sc.nextLine();
        String str_9 = sc.nextLine();
        String str_10 = sc.nextLine();

        System.out.println("별점 : " + point + "(" + point_percentage + "%)");
        System.out.println("1. " + str_1);
        System.out.println("2. " + str_2);
        System.out.println("3. " + str_3);
        System.out.println("4. " + str_4);
        System.out.println("5. " + str_5);
        System.out.println("6. " + str_6);
        System.out.println("7. " + str_7);
        System.out.println("8. " + str_8);
        System.out.println("9. " + str_9);
        System.out.println("10. " + str_10);
    }

}

 

첫주차 강의로 자바의 역사, 변수의 개념, 참조타입 기본타입 같은 간단한 부분을 수강하는구나 하고 

편한 마음으로 강의를 들었으나 숙제 부분에서 이렇게 어려움을 겪을줄은 모르고 있었다.

 

사용자 입력 처리에 대해서는 아예 무지했구나 아니 무지할 수 밖에 없었구나 생각이 든다

(Programmers는 사용자 입력 처리를 작성할 일이없었음, 개인 프로젝트에서는 사용자 입력을 GUI에 입력하여 처리하였음) 

 


 

사용자 입력과 출력에 소홀히 했던 점을 느껴 한번 구구단 출력 프로그램을 정말 단순하게 즉석에서 만들어보아 첨부한다.

import java.util.Scanner;

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

        int n = sc.nextInt();
        System.out.println("구구단 몇 단? : "+n);

        for(int i=1; i<10; i++){
            System.out.printf("%d * %d = %d\n",n,i,n*i);
        }
    }
}

// printf() 에서 %d 의 사용법도 떠올랐다.

'부트캠프 > 문제해결' 카테고리의 다른 글

[문제해결] Java 개인 과제 - Level 2 - 8  (0) 2024.07.29