Language/JAVA

[JAVA] 수학 클래스

IT수정 2024. 10. 16. 09:56

수학 클래스

Math 클래스는 수학 계산에 사용할 수 있는 메서드를 제공한다. Math 클래스가 제공하는 메서드는 모두 정적이므로 Math 클래스로 바로 사용이 가능하다.

구분 코드 리턴값
절대값 int v1 = Math.abs(-5);
double v2 = Math.abs(-3.14);
v1 = 5
v2 = 3.14
올림값 double v3 = Math.ceil(5,3);
double v4 = Math.ceil(-5.3);
v3 = 6.0
v4 = -5.0
버림값 double v5 = Math.floor(5.3);
double v6 = Math.floor(-5.3);
v5 = 5.0
v6 = -6.0
최대값 int v7 = Math.max(5, 9);
double v8 = Math.max(5.3, 2.5);
v7 = 9
v8 = 5.3
최소값 int v9 = Math.min(5, 9);
double v10 = Math.min(5.3, 2.5);
v9 = 5
v10 = 2.5
랜덤값 double v11 = Math.random(); 0.0 <= v11 < 1.0
반올림값 long v14 = Math.round(5.3);
long v15 = Math.rount(5.7);
v14 = 5
v15 = 6

 

random() 메서드는 0.0과 1.0 사이의 double 타입 난수를 리턴한다. 이 값을 이용해서 start부터 시작하는 n개의 정수 (start<=...<(start+n)) 중 하나의 정수를 얻기 위한 공식을 만들면 다음과 같다.

int num = (int) (Math.random() * n) + start;

 

난수를 얻는 또 다른 방법으로 java.util.Random 클래스를 이용할 수 있다. 이 클래스를 이용하면 boolean, int, double 난수를 얻을 수 있다.

객체 생성 설명
Random() 현재 시간을 이용해서 종자값을 자동 설정한다.
Random(long seed) 주어진 종자값을 사용한다.

 

종자값(seed)이란 난수를 만드는 알고리즘에 사용되는 값으로, 종자값이 같으면 같은 난수를 얻는다.

리턴값 메서드(매개변수) 설명
boolean nextBoolean() boolean 타입의 난수를 리턴
double nextDouble() double 타입의 난수를 리턴(0.0 <= ~ < 1.0)
int nextInt() int 타입의 난수를 리턴(-2^32 <= ~ 2^32 -1)
int nextInt(int n) int 타입의 난수를 리턴(0<= ~ <n)

 

예제 코드

package ch12;

import java.util.Arrays;
import java.util.Random;

public class RandomExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] selectNumber = new int[6];
		Random random = new Random(3);
		System.out.print("선택번호: ");
		for (int i=0; i<6; i++) {
			selectNumber[i] = random.nextInt(45) + 1;
			System.out.print(selectNumber[i] + " ");
		}
		System.out.println();
		
		int[] winningNumber = new int[6];
		random = new Random(5);
		System.out.print("당첨번호: ");
		for (int i=0; i<6; i++) {
			winningNumber[i] = random.nextInt(45) + 1;
			System.out.print(winningNumber[i] + " ");
		}
		System.out.println();
		
		Arrays.sort(selectNumber);
		Arrays.sort(winningNumber);
		boolean result = Arrays.equals(selectNumber, winningNumber);
		if (result) {
			System.out.println("1등에 당첨되셨습니다.");
		} else {
			System.out.println("당첨되지 않았습니다.");
		}
	}	

}

 

출력 결과

선택번호: 15 21 16 17 34 28
당첨번호: 18 38 45 15 22 36
당첨되지 않았습니다.

 

선택번호 6개를 얻기 위해 객체의 종자값으로 3을 주었고, 당첨번호 6개를 얻기 위해 종자값으로 5를 주었다. 서로 다른 종자값을 주었기 때문에 선택번호와 당첨번호는 다르게 나온다. 만약 종자값을 동일하게 주면 동일한 난수를 얻기 때문에 선택번호와 당첨번호는 같게 나온다.

 

만약 실제로 위 코드를 사용하려면 두 개의 Random 객체를 각각 시드 없이 생성하면 된다. 각 객체가 서로 다른 시드 값을 기반으로 하여 완전히 랜덤한 값들을 생성한다. 즉 값이 동일할 수도, 아닐 수도 있다.

'Language > JAVA' 카테고리의 다른 글

[JAVA] 형식 클래스  (0) 2024.10.16
[JAVA] 날짜와 시간 클래스  (0) 2024.10.16
[JAVA] 포장 클래스  (1) 2024.10.16
[JAVA] 문자열 클래스  (1) 2024.10.15
[JAVA] System 클래스  (0) 2024.10.15