![[인프런 워밍업 클럽 0기] BE 5일차 과제](https://cdn.inflearn.com/public/files/blogs/5921ea12-e53a-44c2-a294-e0c63bf5a9c0/332957.png)
[인프런 워밍업 클럽 0기] BE 5일차 과제
2024.02.25
클린 코드
최대한 클린하지 않게 작성된 아래 코드는 다음과 같이 동작합니다.
주어지는 숫자를 하나 받는다.
해당 숫자만큼 주사위를 던져, 각 숫자가 몇 번 나왔는지 알려준다.
public class Main {
public static void main(String[] args) throws Exception {
System.out.print("숫자를 입력하세요 : ");
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);
}
}
풀이
복잡하지 않아 굳이 나누지 않았습니다.
public static void main(String[] args) {
// 사용자로부터 숫자 입력 받기
System.out.print("숫자를 입력하세요 : ");
Scanner scanner = new Scanner(System.in);
int numberOfThrows = scanner.nextInt();
// 주사위 던지기 결과를 저장할 배열
int[] diceResults = new int[6];
// 주사위를 numberOfThrows만큼 던지고 결과를 기록
for (int i = 0; i < numberOfThrows; i++) {
int randomNumber = (int) (Math.random() * 6);
diceResults[randomNumber]++;
}
// 주사위 던지기 결과 출력
for (int i = 0; i < 6; i++) {
System.out.printf("%d은(는) %d번 나왔습니다.\n", i + 1, diceResults[i]);
}
}
한 걸음 더!
현재 코드는 주사위가 1~6까지만 있다는 가정으로 작성되어 있습니다.
따라서 주사위가 1~12까지 있거나 1~20까지 있다면 코드를 많이 수정해야 하죠!
위의 코드를 클린하게 개선해 보았다면, 주사위의 숫자 범위가 달라지더라도 코드를 적게 수정할 수 있도 록 고민해 봅시다!
public static void main(String[] args) {
// 사용자로부터 숫자 입력 받기
System.out.print("주사위를 던질 숫자를 입력하세요 : ");
System.out.print("주사위의 최댓값을 입력하세요 : ");
Scanner scanner = new Scanner(System.in);
int numberOfThrows = scanner.nextInt();
int diceMaxNumber = scanner.nextInt();
// 주사위 던지기 결과를 저장할 배열
int[] diceResults = new int[6];
// 주사위를 numberOfThrows만큼 던지고 결과를 기록
for (int i = 0; i < numberOfThrows; i++) {
int randomNumber = (int) (Math.random() * diceMaxNumber);
diceResults[randomNumber]++;
}
// 주사위 던지기 결과 출력
for (int i = 0; i < diceMaxNumber; i++) {
System.out.printf("%d은(는) %d번 나왔습니다.\n", i + 1, diceResults[i]);
}
}
댓글을 작성해보세요.