[인프런 워밍업 스터디 클럽 0기 Back] API 작성 5일차 미션

[문제]image

 

[답]

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);

결과값을 반복해서 출력하기 위한 출력작업을 수행한다.

댓글을 작성해보세요.

채널톡 아이콘