📝 로또 번호 생성기
👉 숫자는 1 ~ 45
👉 번호는 총 6개
👉 중복되는 숫자는 없도록 한다.
👉 오름차순 정렬
예상 결과 화면)
[4, 8, 9, 14, 22, 24]
int[] lotto = new int[6]; for(int i = 0; i <lotto.length; i++){ // 랜덤 숫자 (1~45사이의 난수) int ran = (int) (Math.random() *45 + 1); lotto[i] = ran; for(int x = 0; x <i; x++) { if(lotto[x] == ran) { i--; break; }//if end }//for end }//for end Arrays.sort(lotto); System.out.println(Arrays.toString(lotto));
풀이
1. 6개 숫자 저장할 배열 선언: 번호는 6개 조건에 맞게 lotto 배열 변수 선언과 동시에 초기화
2. 6개 나올 수 있게 반복 :for문
➡ lotto.length로 lotto배열의 길이 미만까지 반복
3. 정수형 변수 ran에 랜덤 숫자 (1~45사이의 난수) 대입
➡ random의 범위가 0.0<=random<=1.0 이기때문에 45를 곱한 뒤에 +1
4. lotto배열 인덱스에 ran에서 생성된 숫자들 대입
5. 앞서 저장된 난수를 접근하기 위한for문
➡ i의 값이 0부터 시작하기때문에 범위 i로 잡고
6. if문
7. Arrays.sort(배열명)
8. lotto출력
3. 0.0 <= random <1.0
//0.0 <= random < 45.0
//1~45에서 45를 만들기 위해 45을 곱해준다 //1.0 <= random < 46.0 //0.0이 1이 될수 있도록 + 1 // 46을 곱해주지 않는 이유는 47.0을 형변환하면 범위가 46이되기때문에 45를 곱하고 +1 // 1 <= random < 46
4. //lotto 배열에 ran에서 나온 숫자 저장
// 일단 중복값을 받고 아래for문을 반복해서 중복값인지 확인하고
// i값을 줄여서 중복이 있던 인덱스 자리에 새롭게 생성된 난수를 넣는다.
현재 생성된 난수 ran이 lotto 배열에 존재하는 경우
//=> 난수 재생성
//i는 바퀴를 파악할 수 있다.
//첫번째 바퀴 i == 0
//두번째 바퀴 i == 1 //값 대입할때 첫번째 바퀴와 값이 겹치는지 확인
//세번째 바퀴 i == 3 //값 대입할때 첫~두번째 바퀴와 값이 겹치는지 확인
//네번째 바퀴 i == 4 //값 대입할때 첫~세번째 바퀴와 값이 겹치는지 확인
//다섯번째 바퀴 i == 5 //값 대입할때 첫~네번째 바퀴와 값이 겹치는지 확인
//여섯번째 바퀴 i == 6 //값 대입할때 첫~다섯번째 바퀴와 값이 겹치는지 확인
5. //0보다 0이 작을 수 없으니 i가 0일때는 패스하고
//바깥for문에서 i가 2가 되면 k는 0,1 반복한다.
//앞 서 저장된 난수와, 새로 생성된 난수가 같을경우
// => 중복이 발생했다.
//중복 발생 == i값이 다음으로 증가하지 않고 난수를 다시 만들어야한다.
// -> 결론 : i값만 증가시키지 않으면 된다.
6. //i 값을 증가시키지 않고(다음바퀴로 넘어가지 않고) 새로 난수를 생성
//바깥for문은 i++하는 형태이니깐
//i값은 --해줘서 같은 i의 바퀴를 해준다
i-- 하는 이유: // 중복이 발생한 경우 제자리에서 다시 난수 발생
break; //i--를 해서 다음으로 넘어가지 않는상태에서 안쪽for문(중복검사)를 멈추을 멈추고
// 다시 바깥for문 진행
//continue를 쓰면 안쪽for문을 반복해서 break;이 더 적합
7.
//Arrays : 배열을 위한 기능을 제공하는 클래스
//Arrays.sort(배열명)
// -> 배열 내 값들을 오름차순 순서로 정렬
Math.random() : 0.0 이상 1.0미만의 난수를 발생시키는 메소드(기능) -> double
Math.random() * 21값을 만들어진 배열 arr[i]에 순서대로 집어 넣는다.
'Backend > 문제 풀이' 카테고리의 다른 글
[Java] Polymorphism(다형성)_예제 (0) | 2021.09.11 |
---|---|
[Java] Inheritance(상속) 예제 (0) | 2021.09.08 |
[Java|연습] 2차원 Array(배열)_기초 문제 행,열 합 (0) | 2021.09.02 |
[Java|연습] Array(배열)_초기화 (0) | 2021.09.02 |
[Java] 소수 판별 문제_for, if, flag (0) | 2021.08.31 |