[인프런 워밍업 클럽] 과제5

Jiwon·2024년 5월 9일
0
post-thumbnail

📚 인프런 강의와 스터디를 바탕으로 한 과제를 풀이한 포스트입니다.

<문제> 제시된 코드를 더 좋은 코드로 바꾸기

<코드>

package practice5;
import java.util.Scanner;

class Dice
{
	int playNumber;
	int[] rNumber;
	int diceType = 6;
	
	public Dice(int playNumber)
	{
		this.playNumber = playNumber;
		this.rNumber = new int [diceType];
		
		for (int i = 0; i < diceType; i++) {
			rNumber[i] = 0;
		}
	}
	
	public void Play() {
		for (int i = 0; i < playNumber; i++) {
			double b = (Math.random() * diceType) ;
			int doubleToint = (int) b;
			rNumber[doubleToint]++;
		}
	}
	
	public void Result() {
		for (int i = 0; i < diceType; i++) {
			System.out.printf((i+1) + "은 %d번 나왔습니다.\n", rNumber[i]);
		}
		
    }
	
}

public class practice5 {
	
	public static void main(String args[]) throws Exception
	{
		System.out.print("숫자를 입력하세요: ");
		Scanner scanner = new Scanner(System.in);
		int a = scanner.nextInt();
		Dice dice = new Dice(a);
		dice.Play();
		dice.Result();	
	}

}

<풀이>

  • 사용자에게 입력된 숫자만큼 주사위 숫자를 랜덤으로 받고, 나온 주사위 면의 횟수를 출력하는 프로그램이다.
  • 먼저, main 함수와 실제 기능을 수행하는 Dice 클래스를 분리했다.
  • 객체 생성자는 입력받은 실행횟수playNumber를 전달받고, 주사위 면의 개수diceType에 따라서 각 면의 숫자만큼 해당하는 길이를 갖는 배열 rNumber를 만든다.
  • Play 함수:
    ▶ 실행횟수만큼 랜덤으로 숫자를 받아오는 기능을 가진다. 주사위의 수는 정수이기 때문에 double형을 (int)로 형 변환해주었다.
    *처음에 Math.round(~)로 하다가 계속 에러가 났는데, 이는 반올림 함수였다. (..) 내림, 버림에 대한 함수도 있어서 버림 함수를 적용해도 결과는 같을 것이다.
    ▶ 랜덤 발생한 숫자와 주사위 각 면의 숫자 배열은 동일한 값의 인덱스를 갖고 있으므로 바로 해당 인덱스의 수를 증가시킨다.
  • Result 함수: 각각의 주사위 면의 숫자에 대해서 몇 번 나왔는지 출력한다. 출력 시에 배열이 0부터 시작함을 감안해서 i+1로 주사위 면의 숫자를 출력한다.

<출력 결과>


  • 주사위 숫자의 범위가 달라지더라도 diceType의 값만 바꿔주면 되기 때문에 코드의 수정을 줄일 수 있다. 아래는 주사위 숫자 범위가 12인 경우다.

  • 클린코드를 작성해야 함에 유의해서 클래스 이름은 명사로, 메서드 이름은 동사로 작성하고자 했다. 함수도 하나의 함수가 하나의 역할만 할 수 있도록 분리해서 작성했다.

[Reference]

profile
écoute les murmures du cœur

0개의 댓글

관련 채용 정보