[인프런 워밍업 클럽 BE 0기] 5일차 과제
9개월 전
제시된 코드를 리팩토링 해보기
기존 코드
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);
}
}
}
리팩토링 내용
주사위 결과를 counts 배열에 저장하는 것으로 변경
Random 클래스를 이용하여 더 랜덤한 정수 값을 전달 받고, counts 배열에 저장 -> if-else문도 제거됨
주사위 결과를 받는 부분을 메서드 분리
출력 부분은 반복문으로 처리하여 중복코드 제거
결과 코드
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;
}
}
댓글을 작성해보세요.