[인프런 워밍업 클럽 BE 0기] 5일차 과제

[인프런 워밍업 클럽 BE 0기] 5일차 과제

 

제시된 코드를 리팩토링 해보기

 

기존 코드

public class Main {
    public static void main(String[] args) {
        System.out.println("숫자를 입력하세요 : ");
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();

        int r1 = 0, r2 = 0, r3 = 0, r4 = 0, r5 = 0, r6 = 0;

        for (int i = 0; i < a; i++) {
            double b = Math.random() * 6;


            if (b >= 0 && b < 1) {
                r1++;
            } else if (b >= 1 && b < 2) {
                r2++;
            } else if (b >= 2 && b < 3) {
                r3++;
            }else if (b >= 3 && b < 4) {
                r4++;
            }else if (b >= 4 && b < 5) {
                r5++;
            }else if (b >= 5 && b < 6) {
                r6++;
            }

            System.out.printf("1은 %d번 나왔습니다.\n", r1);
            System.out.printf("2는 %d번 나왔습니다.\n", r2);
            System.out.printf("3은 %d번 나왔습니다.\n", r3);
            System.out.printf("4는 %d번 나왔습니다.\n", r4);
            System.out.printf("5는 %d번 나왔습니다.\n", r5);
            System.out.printf("6은 %d번 나왔습니다.\n", r6);
        }
    }
}

 

리팩토링 내용

  1. 주사위 결과를 counts 배열에 저장하는 것으로 변경

  2. Random 클래스를 이용하여 더 랜덤한 정수 값을 전달 받고, counts 배열에 저장 -> if-else문도 제거됨

  3. 주사위 결과를 받는 부분을 메서드 분리

  4. 출력 부분은 반복문으로 처리하여 중복코드 제거

 

결과 코드

public class Main {
    public static void main(String[] args) {
        System.out.println("숫자를 입력하세요 : ");
        Scanner scanner = new Scanner(System.in);
        int times = scanner.nextInt();

        int[] counts = getDiceResult(times);

        for (int i = 0; i < counts.length; i++) {
            System.out.printf("%d는 %d번 나왔습니다.\n", i + 1, counts[i]);
        }
    }

    public static int[] getDiceResult(int times) {
        int[] counts = new int[6];
        Random random = new Random();

        for (int i = 0; i < times; i++) {
            int randomNumber = random.nextInt(6) + 1;

            counts[randomNumber - 1]++;
        }

        return counts;
    }
}

 

댓글을 작성해보세요.

채널톡 아이콘