11.13 Math.Random 클래스
11.13.1 Math 클래스
java.lang.Math 클래스는 수학 계산에 사용할 수 있는 메소드를 제공하고 있다. Math 클래스가 제공하는 메소드는 모두 정적(static) 이므로 Math 클래스로 바로 사용이 가능하다. 다음은 Math 클래스가 제공하는 메소드를 설명한 표이다.
메소드 | 설명 | 예제코드 | 리턴값 |
int abs(int a) double abs(double a) |
절대값 |
int v1 =Math.abs(-5); double v2 =Math.abs(-3.14) |
v1 =5 v2=3.14 |
double ceil(double a) | 올림값 |
double v3 =Math.ceil(5.3); double v4 =Math.ceil(-5.3); |
v3 =6.0 v4 =-5.0 |
double floor(double a) | 버림값 | double v5 =Math.floor(5.3); |
v5 =5.0 v6 =-6.0 |
int max(int a, int b) double max(double a, double b) |
최대값 |
int v7=Math.max(5, 9); double v8=Math.max(5.3, 2.5); |
v7 =9 v8=5.3 |
int min(int a, int b); double min(double a, double b) |
최소값 |
int v9 =Math.min(5, 9); double v10 =Math.min(5.3, 2.5); |
v9 =5 v10=2.5 |
double random() | 랜덤값 | double v11 =Math.random(); | 0.0<=v11<1.0 |
double rint(double a) |
가까운 정수의 실수값 |
double v12 =Math.rint(5.3); double v13 =Math.rint(5.7); |
v12 =5.0 v13=6.0 |
long round(double a) | 반올림값 |
long v14=Math.round(5.3); long v15=Math.round(5.7) |
v14=5 v15=6 |
public class MathExample {
public static void main(String[] args) {
int v1 =Math.abs(-5);
double v2 =Math.abs(-3.14);
System.out.println("v1 =" + v1);
System.out.println("v2 =" + v2);
double v3 =Math.ceil(5.3);
double v4=Math.ceil(-5.3);
System.out.println("v3="+ v3);
System.out.println("v4="+ v4);
double v5=Math.floor(5.3);
double v6=Math.floor(-5.3);
System.out.println("v5="+ v5);
System.out.println("v6="+ v6);
int v7 =Math.max(5, 9);
double v8=Math.max(5.3, 2.5);
System.out.println("v7="+v7);
System.out.println("v8="+v8);
int v9 =Math.min(5, 9);
double v10 =Math.min(5.3, 2.5);
System.out.println("v9="+ v9);
System.out.println("v10="+ v10);
double v11 =Math.random();
System.out.println("v11=" + v11);
double v12=Math.rint(5.3);
double v13=Math.rint(5.7);
System.out.println("v12="+ v12);
System.out.println("v13="+ v13);
double v14 =Math.round(5.3);
double v15=Math.round(5.7);
System.out.println("v14="+v14);
System.out.println("v15="+ v15);
double value =12.3456;
double temp1 =value *10;
long temp2=Math.round(temp1);
double v16=temp2/100.0;
System.out.println("v16="+v16);
}
}
v1 =5
v2 =3.14
v3=6.0
v4=-5.0
v5=5.0
v6=-6.0
v7=9
v8=5.3
v9=5
v10=2.5
v11=0.573351363666972
v12=5.0
v13=6.0
v14=5.0
v15=6.0
v16=1.23
round() 메소드는 항상 소수점 첫째자리에서 반올림해서 정수값을 리턴한다. 만약 원하는 소수 자릿수에서 반올림된 값을 얻기 위해서는 반올림할 자릿수가 소수점 첫째 자리가 되도록 10n 을 곱한 후, round() 메소드의 리턴값을 얻는다.
Math.random() 메소드는 0.0 과 1.0 사이의 범위에 속하는 하나의 double 타입의 값을 리턴한다. 0.0 은 범위에 포함되고 1.0은 포함되지 않는다.
0.0 <= Math.random() <1.0
Math.random() 을 활용해서 1부터 10까지의 정수 난수를 얻고 싶다면 다음과 같은 순서로 연산식을 만들면 된다.
1. 각 변에 10을 곱하면 다음과 같이 0.0 <= .... <10.0 사이의 범위에 속하는 하나의 double 타입의 값을 얻을 수 있다.
0.0*10 <= Math.random()*10 <1.0*10
2. 각 변을 int 타입으로 강제 타입 변환하면 다음과 같이 0 <= ... <10 사이의 범위에 속하는 하나의 int 타입의 값을 얻을 수 있다.
(int)(0.0*10) <= (int)(Math.random()*10) < (int) (1.0*10)
3.각 변에 1을 더하면 다음과 같이 1 <= .... <11 사이의 범위에 속하는 하나의 정수를 얻게 된다.
(int)(0.0*10) +1 <= (int)(Math.random()*10)+1 < (int)(1.0*(10) +1
4. 이제 start <= ... < (start +n) 범위에 속하는 하나의 정수를 얻기 위한 연산식을 다음과 같이 만들면 된다.
int num =(int)(Math.random()*n) +start;
주사위 번호 뽑기
int num =(int) (Math.random()*6) +1;
로또 번호 뽑기
int num =(int)(Math.random()*45)+1;
public class MathRandomExample {
public static void main(String[] args) {
int num =(int)(Math.random()*6)+1;
System.out.println("주사위 눈:"+ num);
}
}
11.13.2 Random 클래스
java.util.Random 클래스는 난수를 얻어내기 위해 다양한 메소드를 제공한다. Math.random() 메소드는 0.0 에서 1 사이의 double 난수를 얻는 데만 사용한다면, Random 클래스는 boolean, int, long, float, double 난수를 얻을 수 있다. 또 다른 차이점은 Random 클래스는 종자값(seed) 을 설정할 수 있다. 종자값은 난수를 만드는 알고리즘에 사용되는 값으로 종자값이 같으면 같은 난수를 얻는다. Random 클래스로부터 Random 객체를 생성하는 방법은 다음 두 가지가 있다.
생성자 | 설명 |
Random() | 호출 시마다 다른 종자값(현재시간 이용)이 자동 설정된다. |
Random(long seed) | 매개값으로 주어진 종자값이 설정된다. |
다음은 Random 클래스가 제공하는 메소드이다.
리턴값 | 메소드(매개 변수) | 설명 |
boolean | nextBoolean() | boolean 타입의 난수를 리턴 |
double | nextDouble() | double 타입의 난수를 리턴(0.0 <=~<1.0) |
int | nextInt() | int 타입의 난수를 리턴(-2 <=~<=2-1); |
int | nextInt(int n) | int 타입의 난수를 리턴(0 <=~ <n) |
다음 예제는 로또의 여섯 숫자를 얻는 방법을 보여준다. 로또는 1~45 범위의 정수 숫자만 선택할 수 있으므로 nextInt(45) + 1연산식을
사용하면 된다.
public class RandomExample {
public static void main(String[] args) {
int[] selectNumber =new int[6];
Random random =new Random(3);
System.out.println("선택 번호 :" );
for(int i=0; i<6; i++){
selectNumber[i] =random.nextInt(45)+1;
System.out.println(selectNumber[i] + "");
}
System.out.println();
//당첨번호
int[] winningNumber =new int[6];
random =new Random(5);
System.out.println("당첨 번호 :");
for(int i=0; i<6; i++){
winningNumber[i] =random.nextInt(45)+1;
System.out.println(winningNumber[i]+"");
}
//당첨 여부
Arrays.sort(selectNumber);
Arrays.sort(winningNumber);
boolean result =Arrays.equals(selectNumber, winningNumber);
System.out.println("당첨 여부 :");
if(result){
System.out.println("1등에 당첨되셨습니다.");
}else{
System.out.println("당첨되지 않았습니다.");
}
}
}
선택 번호 :
15
21
16
17
34
28
당첨 번호 :
18
38
45
15
22
36
당첨 여부 :
당첨되지 않았습니다.
댓글 ( 4)
댓글 남기기