자바

JAVA 자바 Math.abs() , Math.ceil() , Math.floor() , Math.max() , Math.min() , Math.random() 난수 생성 , Math.rint() , Math.round() // Random 클래스 / Random.nextBoolean(), Random.nextDouble(), Random.nextInt(), Random.nextIn(int n) / ..

알통몬_ 2017. 3. 15. 10:54
반응형

안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^ 


Math 클래스

 java.lang.Math 클래스는 수학 계산에 사용할 수 있는 메서드를 제공합니다. 모두 static 메서드이기 때문에 Math 클래스로 바로 사용 가능합니다.




double value = 12.3456;

double temp1 = value * 100;

long temp2 = Math.round(temp1);

double v16 = temp2 / 100.0;

System.out.println("v16=" + v16);//이부분은 소수 셋째자리에서 반올림하는 코드입니다.

만약 원하는 소수 자릿수에서 반올림된 값을 얻기위해서는 반올림할 자릿수가 소수점 첫째 자리가 되도록 10의 n승을 곱하고 round() 메서드의 리턴값을 얻은 후 다시 10.0의 n승으로 다시 나눠주면 됩니다.

}

 

}



Math.random() 메서드로 난수 얻기, 난수 발생 시키기


Math.random() 메서드는 0.0과 1.0 사이의 double 타입 값을 리턴합니다. 0.0은 포함하지만 1.0은 포함하지 않습니다.  0.0<= math.random() <1.0


Math.random() 을 이용해서 0~10 사이의 정수 랜덤하게 얻고 싶다면 아래처럼 하면 됩니다.

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

이것을 사용해서 로또 번호를 뽑거나 주사위를 굴리는 예제를 만들 수 있습니다.

주사위 굴리기 예제)

public class MathRandomExample {

public static void main(String[] args) {

int num = (int) (Math.random()*6) + 1; // 1~6사이 숫자

System.out.println("주사위 눈: " + num);

}

}


=======================================================================================



Random 클래스

 난수를 얻어내기 위한 다양한 메서드를 제공합니다. 

Math.random() 메서드는 0.0에서 1사이의 double 타입의 난수를 얻는데 사용되지만, 

Random 클래스는 boolean, int, long, float, double 난수를 얻을 수  있습니다. 

또한 종자값(Seed)을 설정할 수 있습니다.

종자값 : 난수를 만드는 알고리즘에서 사용되는 값

종자값이 같으면 같은 난수를 얻습니다. 


Random 클래스로부터 객체 생성 방법

생성자                   설명

Random()               호출 시마다 다른 종자값(현재시간 이용)이 자동 설정됩니다.

Random(long seed)    매개값으로 주어진 종자값이 설정됩니다.


Random클래스가 제공하는 메서드

리턴값         메서드(매개변수)     설명

boolean      nextBoolean()         boolean 타입의 난수를 리턴합니다.

double       nextDouble()           double  타입의 난수를 리턴합니다.(0.0<= ~ <1.0)

int            nextInt()                int 타입의 난수를 리턴합니다.(-2의31승 <=~<=2의31승-1)

int            nextInt(int n)           int 타입의 난수를 리턴합니다. (0<= ~ < n)


로또번호 얻기 예제)

 import java.util.Arrays;

import java.util.Random;


public class RandomExample {

public static void main(String[] args) {

//선택번호

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);

System.out.print("당첨 여부: ");

if(result) {

System.out.println("1등에 당첨되셨습니다.");

} else {

System.out.println("당첨되지 않았습니다.");

}

}

}

1) 종자값을 동일하게 해준 경우
 계속 같은 값이 나옵니다.
2) 종자값을 다르게 해준 경우 
 서로 종자값이 다르기 때문에 당첨이 불가능합니다.
3) 종자값을 주지 않은 경우
두 번호 모두 계속 다른 번호가 나옵니다.

그리고 난수는 따로 if문을 설정해주지 않으면 같은 번호가 나올 수 있습니다.

 


반응형