본문 바로가기

프로그래밍/자바

자바002 - 랜덤주사위 일정 숫자 나올때까지 굴리기


이번에는 Math.random()을 이용한 주사위를 굴려서 일정 숫자가 나오는 코드를 작성해보자.

-Math.random() 함수는 double 형으로 0.0이상 1.0 미만 사이의 값을 반환하는 함수이다.

Math.random()은 double타입의 숫자를 0~1사이에서 램덤으로 생성한다.

Math.random()함수를 사용해보기 위해 아래와 같이 작성해보자.

public class Double {
    public static void main(String[] args) {
    int i = Math.random();
    }
}

정수형 변수 i 값을 만들고 위 코드를 작성하면 에러가 발생한다.

Math.random()을 통해 나오는 값은 모두 double타입의 실수형이다.

그렇담 int idouble i로 작성해야하는가?

사람마다 다를 수 있으나 나는 주사위의 숫자는 1~6의 정수형으로 나타나야 함으로 정수형으로 표현하고싶다.

이렇게 서로간의 자료형이 다를때 '캐스팅'이라는 방법을 사용한다.

아래와 같이 작성해보자.

public class Double {
    public static void main(String[] args) {
    int i = (int)(Math.random() );
    System.out.println(i);
    }
}

0~1사이의 소수점을 가진 i값이 정해지고 출력을해보면 i값이 출력될 것이다.

Math.random()의 사용법을 알았다. 그럼 문제다.

Q. while문과 Math.random()메소드를 이용해서 두 개의 주사위를 던졌을 때 나오는 눈을 (눈1, 눈2) 형태로 출력하고,

눈의 합이 5가 아니면 계속 주사위를 던지고, 눈의 합이 5이면 실행을 멈추는 코드를 작성하시오.

(출처 : 이것이 자바다 p133 4번 문제)

(아래는 내가 작성한 코드이다. 답이 쉽게 떠오르지않아도 괜찮다! 천천히 생각해보고 종이에 끄적여가며 작성해보자)

더보기
public class Double {
    public static void main(String[] args) {
        while (true) {
            int i = (int)(Math.random() * 6)+1;
            int j = (int)(Math.random() * 6)+1;

            if (i + j == 5) {
                System.out.printf("(%d, %d)", i, j);
                break;
            }
            System.out.printf("(%d, %d)", i, j);
        }
    }
}

 

'프로그래밍 > 자바' 카테고리의 다른 글

자바001 - for문을 이용한 구구단 출력하기.  (0) 2022.03.22
자바를 시작하자  (0) 2022.03.22