package ex_math;
public class Ex1 {
public static void main(String[] args) {
/*
* java.lang.Math 클래스
*
*/
// Math 클래스의 상수
System.out.println("PI 값 : " + Math.PI);
// Math 클래스의 static 메서드
int num = 10;
System.out.println("num의 절대값 : " + Math.abs(num));
System.out.println("num 과 20 중 큰 값 : " + Math.max(num, 20));
System.out.println("4 의 제곱근 : " + Math.sqrt(4));
double dNum = 3.141592;
System.out.println("실수 dNum의 소수점 첫째자리 반올림값 : " + Math.round(dNum));
// 항상 소수점 첫째자리에서 반올림이 일어나므로 X번째 자리 반올림을 위해서는
// 반올림할 숫자의 반올림 자리 수를 첫번째 자리에 위치하도록 변형해야한다!
// 실수 3.141592의 소수점 4번째 자리 숫자를 반올림하기 위해서
// 해당 숫자를 소수점 첫번째 자리로 이동시키기 위한 값을 직접 곱하거나
// 해당 숫자에 10^(x-1) 값을 곱해야함(x 는 반올림할 자리수의 값)
// ex) 3.141592 * 1000 또는 3.141592 * (10^(4-1))
// => 또한, 원래 자리로 숫자를 되돌리기 위해 다시 곱한 만큼 나눗셈 수행
// ex) 3.141592 * 1000 / 1000
// => 주의! Math.round() 수행 시 리턴값이 long이므로
// 정수 1000을 다시 나눌 경우 소수점이 사라지게 된다(long / int => long)
// 따라서, 두 피연산자 중 한 쪽을 실수형으로 변환 후 연산을 수행!
// ex) Math.round(dNum * 1000) / 1000.0
System.out.println("실수 dNum의 소수점 넷째자리 반올림값 : " + (Math.round(dNum * 1000) / 1000.0));
System.out.println("실수 dNum의 소수점 둘째자리 반올림값 : " + (Math.round(dNum * 10) / 10.0));
/*
* Math.random()
* - 난수(임의의 수) 발생을 위한 메서드
* - Math.random() : 0.0 <= x < 1.0 범위의 double 타입 난수 발생
*
* < 난수 발생 기본 공식 >
* 1. (정수화) (Math.random() * 상한값) : 0 ~ 상한값 - 1 (0 <= x < 상한값)
* 2. (정수화) (Math.random() * 상한값) + 1 : 1 ~ 상한값 (1 <= x <= 상한값)
* 3. 복합 공식
* (정수화) (Math.random() * (상한값 - 하한값 + 1) + 하한값) : 하한값 ~ 상한값
* (하한값 <= x <= 상한값)
*
*/
System.out.println("========================================");
for (int i = 1; i <= 10; i++) {
// System.out.println(Math.random()); // 0.0 <= x < 1.0
// 정수 1자리 범위의 난수 발생시키기 위해서는
// Math.random() 결과를 원하는 자릿수만큼 정수로 이동시키고
// 남은 자리 숫자들은 제거
// System.out.println((int) (Math.random() * 10)); // 0 <= x < 10
// 0을 제외하고 1부터 상한값까지의 난수 발생을 위해서는
// 난수 발생 결과에 +1을 수행
System.out.println((int) (Math.random() * 10) + 1); // 1 <= x < 11(1 ~ 10)
}
System.out.println("=======================================================");
// 복합 공식 적용 시
int upperNum = 8; // 상한값
int lowerNum = 3; // 하한값
for (int i = 1; i <= 10; i++) {
System.out.println((int) (Math.random() * (upperNum - lowerNum + 1) + lowerNum));
}
}
}
}package ex_math;
public class Test1 {
public static void main(String[] args) {
/*
* Math.random() 메서드를 활용한 로또 번호 생성 프로그램
* - 1 ~ 45 까지의 6개의 난수를 발생
* - 발생된 난수(로또 번호)를 배열에 저장
* 단, 배열에 저장되는 6개의 난수는 중복이 제거된 난수!
* => 배열에 난수 저장 전 배열 내에 저장된 숫자와 중복되는 검사 후
* 중복되지 않을 경우에만 배열에 난수를 저장
*
* < 출력결과 예시 >
* 나의 로또번호 : 2 12 16 25 39 40
* 1등 당첨번호 : 3 12 16 26 30 40
* 일치하는 번호 갯수 : 3 개
*
*/
// 로또 번호 6개를 저장할 int형 배열 myLotto 생성
int[] myLotto = new int[6];
// 1등 당첨번호
int[] thisWeekLotto = {3, 12, 16, 26, 30, 40};
// 1. 생성된 난수를 배열 내의 모든 숫자와 비교하여 일치하는 숫자가 없을 경우에 난수를 저장하는 방법
// 2. 일단 난수를 저장한 후 일치하는 숫자가 없을 경우 제어변수 i값을 1만큼 빼는 방법
// => 안쪽 for문을 사용하여 배열 내의 모든 숫자와 발생시킨 난수를 비교
}
}