[Math.random()] 로또 번호 생성 프로그램
2022. 10. 6. 08:12ㆍDev.Program/Java & Spring
728x90
[로또 번호 생성 프로그램 만들기 과제][ 문제 ] 로또 번호 생성 프로그램 만들기1 ~ 45 사이의 중복되지 않는 난수 6개를 생성하여 배열에 저장한 후, 임의로 지정된 1등 당첨번호와 비교하여 일치하는 개수를 출력하는 프로그램 [ 출력 결과(예시) ] 나의 로또 번호 : 10, 15, 30, 35, 37, 40 1등 당첨번호 : 1, 10, 15, 19, 30, 45 일치하는 번호 개수 : 3개 [ 프로그램 작성 조건 ] 1. 난수 6개(로또번호)를 저장할 배열명 : myLotto ⇒ 중복된 숫자가 저장되지 않도록 중복 제거 필수! (숫자 6개라고 6바퀴만 돌리면 안되고 중복 안될때까지 계속 돌려야됨!!!) 2. 1등 당첨번호를 저장할 배열명 : thisWeekLotto (저장할 숫자 : 10, 19, 1, 30, 45, 15) 3. 화면에 출력할 나의 로또 번호와 1등 당첨번호는 오름차순으로 정렬한 뒤 출력 ⇒ Arrays.sort() 메서드 활용 (→ 배열만 넣으면 정렬 p.159~160) 4. 난수 발생은 Math.random() 메서드 사용 |
로또 < 풀이 >
import java.util.Arrays; public class Test1 { public static void main(String[] args) { int[] myLotto = {34, 41, 13, 18, 8, 21}; // 내가 찍은 번호 int[] thisWeekLotto = new int[7]; // 이번주 당첨 번호(매주 추첨) // thisWeekLotto에 중복없이 숫자 6개 담기 for(int i = 0; i < thisWeekLotto.length; i++) { thisWeekLotto[i] = (int)(Math.random() * 45 + 1); // 난수 생성하여 배열에 저장 for(int j = 0; j < i; j++) { ⇒ 이 부분을 ‘<= i’ 로 하면 반복을 줄일 수 있다 if(thisWeekLotto[i] == thisWeekLotto[j]) { // 생성된 번호 비교 i--; // 중복이면 다시 저장하러 바깥for문으로 돌아감 break; } } } Arrays.sort(myLotto); // 나의 로또 번호 정렬 System.out.print("나의 로또 번호 : "); for(int i = 0; i < myLotto.length; i++) { System.out.print(myLotto[i]); for(int j = 0; j < myLotto.length-1; j++) { if(myLotto[i] == myLotto[j]) { System.out.print(", "); } } } // 나의 로또 번호 출력 System.out.println(); Arrays.sort(thisWeekLotto, 0, 6); // 보너스 번호 thisWeekLotto[6] 제외하고 정렬 System.out.print("1등 당첨번호 : "); for(int i = 0; i < thisWeekLotto.length-1; i++) { System.out.print(thisWeekLotto[i]); for(int j = 0; j < thisWeekLotto.length-2; j++) { if(thisWeekLotto[i] == thisWeekLotto[j]) { System.out.print(", "); } } } // 이번주 1등 당첨번호 출력 System.out.println(); System.out.println("+ 보너스 번호 : " + thisWeekLotto[6]); // 보너스 번호 출력 int count = 0; // 일치하는 개수 담을 변수 count for(int i = 0; i < thisWeekLotto.length-1; i++) { for(int j = 0; j < myLotto.length; j++) { if(thisWeekLotto[i] == myLotto[j]) { // 나의 로또번호와 당첨번호 일치할 경우 count += 1; // count 값 1씩 증가 } } } System.out.println(); System.out.println("일치하는 번호 개수 : " + count + "개"); switch (count) { // 일치하는 수에 따라 당첨판별 case 6: // 번호 6개 일치 System.out.println("1등에 당첨되셨습니다!"); break; case 5: // 번호 5개 일치 int bonus = 0; for(int i = 0; i < myLotto.length; i++) { if(thisWeekLotto[6] == myLotto[i]) { // 보너스 번호 조회 bonus += 1; } } if(bonus == 1) { // 번호 5개 + 보너스 번호 당첨될 경우 2등 System.out.println("+ 보너스번호 1개 일치!"); System.out.println("2등에 당첨되셨습니다!"); } else { // 보너스 번호 당첨 없이 번호 5개만 일치할 경우 3등 System.out.println("3등에 당첨되셨습니다!"); } break; case 4: // 번호 4개 일치 System.out.println("4등에 당첨되셨습니다!"); break; case 3: // 번호 3개 일치 System.out.println("5등에 당첨되셨습니다!"); break; default: // 그 외 System.out.println("낙첨되셨습니다! 다음 기회에..."); break; } } } |
- 내가 푼 코드
import java.util.Arrays; public class Test5 { public static void main(String[] args) { /* * [ 문제 ] 로또 번호 생성 프로그램 만들기 * 1 ~ 45 사이의 중복되지 않는 난수 6개를 생성하여 배열에 저장한 후, * 임의로 지정된 1등 당첨번호와 비교하여 일치하는 개수를 출력하는 프로그램 * * [ 출력 결과(예시) ] * 나의 로또 번호 : 10, 15, 30, 35, 37, 40 * 1등 당첨번호 : 1, 10, 15, 19, 30, 45 * 일치하는 번호 개수 : 3개 * * [ 프로그램 작성 조건 ] * 1. 난수 6개(로또번호)를 저장할 배열명 : myLotto * ⇒ 중복된 숫자가 저장되지 않도록 중복 제거 필수! * 2. 1등 당첨번호를 저장할 배열명 : thisWeekLotto * (저장할 숫자 : 10, 19, 1, 30, 45, 15) * 3. 화면에 출력할 나의 로또 번호와 1등 당첨번호는 오름차순 정렬한 뒤 출력 * ⇒ Arrays.sort() 메서드 활용 * 4. 난수 발생은 Math.random() 메서드 사용 */ int[] myLotto = new int[6]; // 번호 6개 저장할 배열 int[] thisWeekLotto = {10, 19, 1, 30, 45, 15}; // 1등 당첨번호 // 1. for문 사용하여 중복된 숫자 발생 시 제어변수 감소시키는 방법 // for(int i = 0; i < myLotto.length; i++) { // // 난수 생성 // int rNum = (int)(Math.random() * 45 + 1); // // myLotto[i] = rNum; // 현재 배열 위치에 난수 저장 // // ⇒ 만약 중복된 숫자가 발견되면 i값을 1 감소시키므로 // // 다시 현재 위치에 새 난수를 저장하게 된다! // // // 기존에 저장된 myLotto 배열 내의 // // 숫자와 새 난수가 중복인지 판별 // // ⇒ 안쪽 for문을 생성하여 생성된 난수를 // // 배열 내의 숫자와 비교 // for(int j = 0; j < i; j++) { // // 최대 반복 횟수를 저장된 숫자 갯수로 지정 // if(rNum == myLotto[j]) { // // 동일한(중복된) 번호가 존재할 경우 // // i 반복횟수 1 감소시킴 // i--; // System.out.println("중복 번호 확인! - " + rNum); // break; // // 중복 체크 후 더 반복 진행 없이 안쪽 for문 종료 // } // } // // } // 2. while 문을 사용하여 저장되는 숫자 갯수를 체크하면서 // 중복된 숫자가 없을 때만 난수를 저장하는 방법 int count = 0; // 현재 저장된 난수 갯수 체크 변수 while(count < 6) { // 저장된 난수 갯수가 6개 미만일 동안 반복 int rNum = (int)(Math.random() * 45 + 1); // 난수 발생 boolean isDuplicate = false; // 중복 여부 체크 변수 // for문을 사용하여 중복 체크한 뒤 // 중복이면 isDuplicate = true 로 변경 for(int j = 0; j < count; j++) { // 반복 횟수를 저장 숫자 갯수 -1 까지 지정 if(rNum == myLotto[j]) { // 중복 여부 체크 isDuplicate = true; // System.out.println("중복 번호 확인! - " + rNum); break; } } // 중복 체크 변수가 false 일 때만 난수를 배열에 저장 후 카운트 증가시킴 if(!isDuplicate) { myLotto[count] = rNum; // 난수 저장 후 count++; // 카운트 1 증가시킴 } } // ------ 로또 번호 저장 과정과 무관하게 동일한 부분 ------ // 배열에 저장된 번호 정렬 Arrays.sort(myLotto); Arrays.sort(thisWeekLotto); // 자신의 로또 번호 출력 System.out.print("나의 로또 번호 : "); for(int i = 0; i < myLotto.length; i++) { System.out.print(myLotto[i] + " "); } System.out.println(); // 1등 당첨번호 출력 System.out.print("1등 당첨번호 : "); for(int i = 0; i < thisWeekLotto.length; i++) { System.out.print(thisWeekLotto[i] + " "); } System.out.println(); // 일치하는 번호 갯수 카운팅 후 출력 int sameCount = 0; // 자신의 로또 번호와 1등 당첨번호를 // 각각 비교하여 같으면 카운팅 증가시킴 for(int i = 0; i < myLotto.length; i++) { for(int j = 0; j < thisWeekLotto.length; j++) { if(myLotto[i] == thisWeekLotto[j]) { sameCount++; } } } System.out.println("일치하는 번호 개수 : "+ sameCount +"개"); } } |
- 선생님 코드
앞으로 배울 Collection 을 위해 로또 숙제 내줌!
⇒ Collection 쓰면 중복판별하는 코드 한 줄이면 끝남!
728x90
'Dev.Program > Java & Spring' 카테고리의 다른 글
List 계열 / Map 계열 / Stack(스택) / Queue(큐) / 제네릭 / Random 클래스 (0) | 2022.10.06 |
---|---|
Wrapper 클래스 / Collection Framework(컬렉션 프레임워크) (0) | 2022.10.06 |
StringBuffer 와 StringBuilder 클래스 / java.lang.Math 클래스 (1) | 2022.10.06 |
[Java] java.lang.String 클래스 (0) | 2022.10.05 |
[Java] java.lang.Object 클래스 - (2) toString() (0) | 2022.10.05 |