JX405기_비트/Java

Day01-3 메소드 예제 풀어보기(2)

_하루살이_ 2023. 1. 9. 20:59

ScannerUtil을 두고 자주 사용하는 메소드를 util 패키지에서 불러서 사용하기

 ScannerUtil 클래스 코드

package util;

import java.util.Scanner;

//Scanner 클래스를 통해 입력을 받을 시에 도움이 될만한 static 메소드를 모아둔 클래스
public class ScannerUtil {
    // 1. 입력시 사용자에게 보여줄 메세지 출력을 담당할 메소드
    public  static void printMessage(String message){
        System.out.println(message);
        System.out.println("> ");
    }

    // 2. 스캐너 버그를 미리 방지하는 nexLine()
    public static String nextLine(Scanner scanner, String message){
        printMessage(message);
        String temp = scanner.nextLine();
        if(temp.isEmpty()){
            temp = scanner.nextLine();
        }

        return temp;
    }

    // 3. 사용자로부터 정수 입력을 담당하는 nexInt()
    public static int nextInt(Scanner scanner, String message){
        printMessage(message);

        int temp = scanner.nextInt();
        return temp;
    }

    //파라미터의 순서가 중요 파라미터의 순서가 다른 경우 같은 함수이름을 사용할수 있음

    // 4. 사용자로부터 특정 범위의 정수 입력을 담당하는 nextInt()
    public static int nextInt(Scanner scanner, String message, int min, int max){
        int temp = nextInt(scanner, message);

        while (temp < min || temp > max) {
             System.out.println("잘못 입력하셨습니다.");
             temp = nextInt(scanner, message);
        }

        return temp;
    }
}

 

 

메소드 문제 풀이 방법(2)   util패키지의 ScannerUtil 사용해서 풀어보기

package Day01;

import util.ScannerUtil;

import java.util.Scanner;

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

        // 1. 입력
        // 1-1. 번호입력
        int id = getId(scanner);

        // 1-2. 이름 입력
        String name = getName(scanner);

        // 1-3. 국어점수 입력
        int korean = getKorean(scanner);

        // 1-4. 영어점수 입력
        int english = getEnglish(scanner);

        // 1-5. 수학점수 입력
        int math = getMath(scanner);

        // 2. 출력
        // 2-1. 번호, 이름 출력
        // 2-2. 국어, 영어, 수학 출력
        // 2-3. 총점계산
        // 2-4. 평균계산
        // 2-5. 총점 평균 출력
        printInfo(id, name, korean, english, math);


        scanner.close();
    }

    public static int getId(Scanner scanner){
        String message = "학생의 번호를 입력해주세요.";
        return ScannerUtil.nextInt(scanner, message);
    }

    public static String getName(Scanner scanner){
        String temp;
        String message = "학생의 이름을 입력해주세요.";
        temp = ScannerUtil.nextLine(scanner, message);
        return temp;
    }
    public static int getKorean(Scanner scanner){
        String message = "학생의 국어점수를 입력해주세요.";
        int min;
        int max;
        min = 0;
        max = 100;
        return ScannerUtil.nextInt(scanner, message, min, max);
    }

    public static int getEnglish(Scanner scanner){
        String message = "학생의 영어점수를 입력해주세요.";
        int min;
        int max;
        min = 0;
        max = 100;
        return ScannerUtil.nextInt(scanner, message, min, max);
    }

    public static int getMath(Scanner scanner){
        String message = "학생의 수학점수를 입력해주세요.";
        int min;
        int max;
        min = 0;
        max = 100;
        return ScannerUtil.nextInt(scanner, message, min, max);
    }

    public static void printInfo(int id, String name, int korean, int english, int math){

        System.out.println("번호 : " + id + "번 이름 : " + name);
        System.out.printf("국어 : %d점 영어 : %d점 수학 : %d점\n", korean, english, math);
        System.out.printf("총점 : %d점 평균 %f점\n", calculateSum(korean, english, math), calculateAverage(korean, english, math));

    }
    public static int calculateSum(int korean, int english, int math){
        return korean + english + math;
    }
    public static double calculateAverage(int korean, int english, int math){
        final int SUBJECT_SIZE = 3; // 상수 final
        return calculateSum(korean, english, math) / (double)SUBJECT_SIZE;
    }
}