티스토리 뷰

주의 사항!

  • 이 글은 제가 직접 공부하는 중에 작성되고 있습니다.
  • 따라서 제가 이해하는 그대로의 내용이 포함됩니다.
  • 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다.


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); v3 = 6
double floor(double a) 버림값 double v4 = Math.floor(-5.3); v4 = -6
int max(int a, int b);
double max(double a, double b);
최대값 int v5 = Math.max(5, 9);
double v6 = Math.max(5.3, 2.6);
v5 = 9
v6 = 5.3
int min(int a, int b);
double min(double a, double b);
최소값 int v7 = Math.min(5, 9);
double v8 = Math.min(5.3, 2.6);
v7 = 5
v8 = 2.6
double random() 랜덤값 double v9 = Math.random(); 0.0 <= v9 < 1.0
double rint(double a) 가까운 정수의 실수값 double v10 = Math.rint(5.3); v10 = 5.0
long round(double a) 반올림값 long v11 = Math.round(5.3); v11 = 5

round() 메서드는 항상 소수점 첫째 자리에서 반올림해서 정수 값을 리턴합니다. 만약 원하는 소수 자릿수에서 반올림된 값을 얻기 위해서는 반올림할 자릿수가 소수점 첫째 자리가 되도록 10의 n승수를 곱합니다.

 

random() 메서드는 0.0과 1.0 사이의 범위에 속하는 하나의 double 타입의 값을 리턴합니다. 0.0은 범위에 포함되지만 1.0은 범위에 포함되지 않습니다. random() 메서드를 활용해서 1부터 10까지의 정수 난수를 얻고 싶다면 다음과 같은 순서로 연산식을 만들면 됩니다.

0.0 <= Math.random < 1.0

0.0 <= Math.random * 10 < 10.0

0 <= (int)(Math.random * 10) < 10

1 <= (int)(Math.random * 10) + 1 < 11

다음 코드는 주사위 번호를 뽑는 예시입니다.

int number = (int)(Math.random() * 6) + 1;

 

Random 클래스

java.util.Random 클래스는 난수를 얻어내기 위해 다양한 메서드를 제공합니다. Math.random() 메서드는 0.0에서 1.0 사이의 double 난수를 얻는 데만 사용한다면, Random 클래스는 boolean, int, long, float, double 난수를 얻을 수 있습니다. 또 다른 차이점은 Random 클래스는 종자값(seed)을 설정할 수 있습니다. 종자값은 난수를 만드는 알고리즘에 사용되는 값으로 종자값이 같으면 같은 난수를 얻습니다. 

 

Random 클래스로부터 Random 객체를 생성하는 방법은 다음 두 가지가 있습니다.

생성자 설명
Random() 호출 시마다 다른 종자값(현재시간 이용)이 설정됨
Random(long seed) 매개 값으로 주어진 종자값이 설정됨

다음은 Random 클래스가 제공하는 메서드입니다.

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

다음 예제는 로또의 여섯 숫자를 얻는 방법을 보여줍니다. 로또는 1 ~ 45 범위의 정수 숫자만 선택할 수 있으므로 nextInt(45) + 1 연산식을 사용하면 됩니다.

//Main.java
package Example;

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

public class Main {
	public static void main(String[] args) {		
		//선택 번호
		int[] selectNumbers = new int[6];
		
		Random random = new Random();
		
		System.out.print("선택 번호 : ");
		
		for(int i = 0; i < 6; i++) {
			selectNumbers[i] = random.nextInt(45) + 1; 
			System.out.print(selectNumbers[i]);
			
			if(i != 5) {
				System.out.print(", ");
			}
		}
		System.out.println();
		
		//당첨 번호
		int[] winningNumbers = new int[6];
		
		System.out.print("당첨 번호 : ");
		
		for(int i = 0; i < 6; i++) {
			winningNumbers[i] = random.nextInt(45) + 1; 
			System.out.print(winningNumbers[i]);
			
			if(i != 5) {
				System.out.print(", ");
			}
		}
		System.out.println();
		
		//당첨 여부
		Arrays.sort(selectNumbers);
		Arrays.sort(winningNumbers);
		
		int count = 0;
		for(int i = 0; i < 6; i++) {
			if(selectNumbers[i] == winningNumbers[i]) count++;
		}
		
		System.out.println("총 " + count + "개의 번호를 맞췄습니다.");
	}
}

/*
실행결과

선택 번호 : 12, 1, 35, 31, 3, 34
당첨 번호 : 13, 5, 33, 21, 19, 37
총 0개의 번호를 맞췄습니다.

*/

 

'공부 일지 > JAVA 공부 일지' 카테고리의 다른 글

자바, Format 클래스  (0) 2021.04.21
자바, Date, Calendar 클래스  (0) 2021.04.21
자바, Wrapper(포장) 클래스  (0) 2021.04.21
자바, Arrays 클래스  (0) 2021.04.21
자바, 정규 표현식과 Pattern 클래스  (0) 2021.04.21
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함