basic/java 실습

day07 연습문제 - Math.random() 사용하여 랜덤값 생성, 로또 번호 생성하기

못지(Motji) 2021. 5. 1. 16:00

선생님이 재미(?)있는게 있다며 뽀너스로 알려주신 내용! 문제를 풀어보자보자

 

Math.ramdom() = 0~1 사이의 실수를 임의로 만들어주는 메소드

0~1사이의 실수란 > 0.xxxxxxx(x는 임의의숫자)

이것을 사용하면 랜덤값을 출력할 수 있다.

 

ex) 0~9사이 랜덤값 5개 출력

5개를 뽑을 거니까 for문 안에 출력문 넣어주기

0~1사이의 실수가 나오기 때문에 *10을 해주면 0~9의 임의의 숫자가 만들어질것이다.

0.xxxxxx * 10 = x.xxxxx(x는 임의의숫자로 0~9중 하나가 나올것임)

뒤에 소수점을 없애기 위해 실수>정수로 만들어 주면 됨.

기본형 정수 타입의 int로 형변환을 해주면 정수로 변환!

 

여기서 기출 변형 문제

0~5사이의 랜덤값을 출력하고 싶다면 * 6을 했다.

왜?

Math.random은 0~1사이의 실수가 나오기 때문에 * 6을 해주면 0~6사이의 실수가 나올것이기 때문에!

0부터 최대로 올 수 있는 숫자는 5 이다

 

 

그렇다면! 1~5사이의 값을 출력하고싶다. 어떡해야할까?

소수점 첫번째 자리가 0일시 다른 어떠한 숫자를 곱해도 그대로 0이다.

그렇기에 나온숫자에 +1을 해주어 0이 나올수 없겠끔 해줘야 한다.

그러면 곱하는 수는 (n * x)을 했을때 나오는 수의 첫번째에 -1을 해주어 범위를 조정하면 된다. 왜냐하면 +1을 따로 해줬으니까.

 

범위를 설정했을시

12~17

최소값이 12이기 때문에 나중에 +12를 해줘야한다.

그렇다면 최대로 나올 수 있는 수는 5이다.

그럼 * 6을 해줘서 0 ~ 6까지의 실수가 나오게하고 나온값에 +12를 해주면 된다.

(심화)문제3 로또 번호 랜덤으로 생성하기
// 1~45 사이 임의의 번호 6개 선택하고, 오름차순으로 정렬 > 출력

버블정렬을 사용했다. 비교해서 더 작으면 자리 바꿔주기를 첫번째 부터 차례대로 비교

1~45 임의의 숫자가 나오도록 범위설정 해주기 위해 계산하는게 시간이 좀 걸렸고 그외에는 기존에 배웠던 정렬 사용.

 

재미(?)있는 랜덤값 출력 문제 끝~!