랜덤 함수 이용 및 응용
import java.util.Random;
class Homework_180502_09_RandomClass
{
public static void main(String[] args)
{
int r_number;
r_number = (int)(Math.random()*10); //0~9값 랜덤
System.out.println(r_number);
r_number = (int)(Math.random()*10)+1; //1~10값 랜덤
System.out.println(r_number);
r_number = (int)(Math.random()*5)+11; //11~15값 랜덤
System.out.println(r_number);
//10, 20, 30, 40, 50
r_number = (int)(Math.random()*5) * 10;
System.out.println(r_number);
//-1, 0, 1
r_number = (int)(Math.random()*3)-1;
System.out.println(r_number);
//ex) 게임에서 몬스터 랜덤이동 응용 (x,y)
int x,y;
x = (int)(Math.random()*3)-1;
y = (int)(Math.random()*3)-1;
System.out.println("( "+x+" , "+y+" )");
}
}
랜덤함수 이용
랜덤값을 가져오기 위해 Math.random()을 사용한다.
Math.random()값은 double형인 실수 값이기 때문에
원하는 범위의 수의 갯수만큼 곱해 줘야
0부터 원하는 수까지의 랜덤 값을 얻을 수 있다.
ex)
Math.random() * 10을 해주면
0~9까지의 수에서 랜덤한 수가 나오게 된다.
단, 값의 자료형이 double형이기 때문에 캐스트 연산으로 자료형을 바꿔주어야 한다.
ex)
(int)Math.random() * 10
하지만 여기서 주의할 점이 위에 예제처럼 하게 되면
Math.random()값에만 캐스트 연산이 되는데
Math.random()값은 0.xxxxx...의 double형 실수값이고
실수형 자료형을 정수형 자료형으로 캐스트 연산을 해버리면
소숫점이하의 값들은 모두 날라가게 된다.
따라서 캐스트 연산이 Math.random()에만 적용되는 위에 예제에선 값이 항상 0만 나오게 되는 것이다.
따라서
ex)
(int)(Math.random() * 10)
이렇게 실수의값인 Math.random()에 어떠한 값을 곱하여 나온 수에 대해서
캐스트 연산을 해야 우리가 원하는 랜덤한 값을 얻을수 있게 된다.
하지만,
0~9 or 0~99 등등...
0부터 시작하여 어느 범위까지의 랜덤값 뿐만 아니라
11~15, 20~40
또는 10, 20, 30, 40, 50, 60..값을 구할 때도 있기때문에 많은 사람들이 응용해서 사용한다.
ex)
(int)( Math.random() * 숫자 1 ) +, -, *, ... 숫자2
이런 식을 많이 사용한다.
숫자 1에는 랜덤범위 안에 있는 수들의 갯수를 넣어줘야 하며
연산자는 자신의 프로그램에 맞게 선택하고
숫자2는
+와 - 일때는 랜덤수들 중에 시작되는 수
* 일때는 0에서부터 랜덤값이 시작되며 값들간의 값의 차이를 나타낸다.
ex)
(int)( Math.random() * 5 ) + 11
값 : 11 12 13 14 15 중 한가지 랜덤
(int)( Math.random() * 5 ) - 10
값 : -10 -9 -8 -7 -6 중 한가지 랜덤
(int)( Math.random()* 5 ) * 10
값 : 0 10 20 30 40 중 한가지 랜덤
기본 이론은 이러하고 자신한테 알맞게 응용해서
즉, 숫자 1과 숫자 2를 수정하고 연산자들을 잘 활용해서
자신한테 맞게 랜덤값을 얻으면 될 것 같다.