[인프런 워밍업 스터디 클럽 0기 Back] API 작성 5일차 미션
2024.02.24
[문제]
[답]
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
public class Main {
// "는" 이 붙는 숫자에 대한 값들 -> 2는 4는 5는
private static final List<Integer> VALID_NUMBERS = Arrays.asList(2, 4, 5);
public static void main(String[] args) {
// Scanner의 close를 위해 try 구문으로 작성
try (Scanner scanner = new Scanner(System.in)) {
// 주사위 범위 정하기
int diceNuber = getDiceNumber(scanner);
// 주사위 던지는 횟수 구하기
int rollsNumber = getRollsNumber(scanner);
// 주사위 횟수대로 던진 결과값을 저장
int[] resultArray = rollDice(diceNuber, rollsNumber);
// 결과를 출력
printAllResults(resultArray);
}
}
public static int getDiceNumber(Scanner scanner) {
System.out.print("주사위 눈의 숫자를 입력하세요 : ");
return scanner.nextInt();
}
public static int getRollsNumber(Scanner scanner){
System.out.print("숫자를 입력하세요 : ");
return scanner.nextInt();
}
public static int[] rollDice(int diceNuber, int rollsNumber) {
int[] array = new int[diceNuber];
Random random = new Random(); // Random 객체 생성
for (int i = 0; i < rollsNumber; i++) {
int diceNumber = random.nextInt(diceNuber) + 1; // 1부터 diceNuber 까지의 난수 생성
array[diceNumber - 1]++; // 주사위 눈에 해당하는 결과값 증가
}
return array;
}
public static void printSingleResult(int diceNumber, int data) {
if (VALID_NUMBERS.contains(diceNumber)) {
System.out.printf("%d는 %d번 나왔습니다.\n", diceNumber, data);
} else {
System.out.printf("%d은 %d번 나왔습니다.\n", diceNumber, data);
}
}
public static void printAllResults(int[] results) {
for (int i = 0; i < results.length; i++) {
printSingleResult(i + 1, results[i]); // 각 주사위 눈의 결과 출력
}
}
}
기존 코드의 기능을 크게 나누면
던지는 횟수를 입력받는 부분.
주사위 범위를 초기화 하는 부분.
주사위를 던지는 과정.
해당 결과를 출력하는 과정.
답에 대한 부분
int diceNuber = getDiceNumber(scanner);
해당 코드를 작성하여 주사위의 범위를 지정했다. 기존 코드에서는 6으로 하드코딩 되어있었지만,
주사위의 범위가 변경될 가능성도 있기 때문에 확장성을 추가하기 위해 해당 메서드를 구현했다.
int rollsNumber = getRollsNumber(scanner);
해당 코드를 작성하여 주사위를 던지는 횟수를 지정했다. 기존 코드의 숫자를 입력하세요. 와 변수 a에 그 값을 담는 부분에 대한 기능을 수행한다.
int[] resultArray = rollDice(diceNuber, rollsNumber);
입력받은 주사위의 범위와 던진 횟수를 매개변수로 주사위를 굴리는 행위를 구현했다.
결과값은 배열이며 int 자료형으로 구현.
printAllResults(resultArray);
결과값을 반복해서 출력하기 위한 출력작업을 수행한다.
댓글을 작성해보세요.