📚 인프런 강의와 스터디를 바탕으로 한 과제를 풀이한 포스트입니다.
<문제> 제시된 코드를 더 좋은 코드로 바꾸기
<코드>
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();
}
}
<풀이>
Dice
클래스를 분리했다.playNumber
를 전달받고, 주사위 면의 개수diceType
에 따라서 각 면의 숫자만큼 해당하는 길이를 갖는 배열 rNumber
를 만든다.Play
함수:double
형을 (int)
로 형 변환해주었다.Result
함수: 각각의 주사위 면의 숫자에 대해서 몇 번 나왔는지 출력한다. 출력 시에 배열이 0부터 시작함을 감안해서 i+1
로 주사위 면의 숫자를 출력한다.<출력 결과>
주사위 숫자의 범위가 달라지더라도 diceType
의 값만 바꿔주면 되기 때문에 코드의 수정을 줄일 수 있다. 아래는 주사위 숫자 범위가 12인 경우다.
클린코드를 작성해야 함에 유의해서 클래스 이름은 명사로, 메서드 이름은 동사로 작성하고자 했다. 함수도 하나의 함수가 하나의 역할만 할 수 있도록 분리해서 작성했다.
[Reference]