[Java/자바] 배열(2) 예제(로또 번호 생성기)
안녕하세요 오늘은 저번 시간에 배웠던 배열을 활용해서 로또 번호 생성기란 프로그램을 만들어볼까 해요~
로또 프로그램
프로그램을 설명드리자면
45개의 랜덤 숫자중에 6개의 숫자를 사용자에게 입력받아 값을 비교합니다.
보너스 숫자를 입력받는데 보너스 숫자는 따로 입력을 받습니다.
1~5등까지 존재합니다.
1등 => 6개의 숫자 모두 맞히면 1등
2등 => 5개의 숫자와 보너스 번호를 맞히면 2등
3등 => 5개의 숫자를 맞히면 3등
4등=> 4개의 숫자를 맞히면 4등
5등=> 3개의 숫자를 맞히면 5등
그 외의 경우 => 탈락
이렇게 프로그램을 짜려고 합니다.
자 이제 한번 프로그램을 한번 짜 보겠습니다.
1. 우선 먼저 생각해야 할 것이 필요한 클래스와 변수를 생각하는 게 좋습니다.
랜덤으로 값을 넣을 Random클래스와 사용자에게 값을 입력받아야 하니까
Scanner클래스가 필요하겠네요 먼저 임포트를 해줍시다.
import java.util.Random;
import java.util.Scanner;
public class Array_Lotto {
public static void main(String[] args) {
}
}
2. 그다음으로 변수를 생각해 줍니다. 변수는 사용자가 맞힌 값을 담을 변수와
랜덤으로 숫자를 넣어줄 bonus변수와 사용자가 입력할 보너스 변수인 Userbonus를 만들어 주었습니다.
그리고 랜덤으로 6자리의 값을 넣어줄 배열, 입력받을 배열 각각 만들어 주었습니다.
import java.util.Random;
import java.util.Scanner;
public class Array_Lotto {
public static void main(String[] args) {
Random random=new Random();
Scanner sc= new Scanner(System.in);
int count=0;
int bonus,Userbonus;
int Lotto[]=new int[6];
int UserLotto[]=new int[6];
}
}
3. 변수와 배열을 다 만들어 주었다면 for문을 사용하여 랜덤 값을 Lotto [ ] 배열 안에 넣어주었습니다.
radom.nextInt( 45 )+1을 한 이유는 random에 그냥 45를 넣으면 0~44라는 값이 랜덤으로 들어갑니다.
따라서 +1을 해줌으로써 1~45라는 값이 랜덤으로 들어갑니다.
참고로System.out.println(Lotto [i]); 이 출력문은 편의를 위해서 출력을 해둔 것입니다. 1등을 출력해볼려는데 숫자를 모르면 너무 많은 경우의 수가 있기 때문에 실제 프로그램에서는 출력문은 빼놓습니다. ㅎㅎ..
그 뒤로 for문을 다시 돌려 사용자에게 입력 값을 받아 UserLotto [ ] 배열에 넣어줍니다.
배열에 값을 모두 넣어주었으면 bonus값도 넣어주어야죠! 따라서 랜덤으로 bonus변수에 값을 넣어준 뒤 사용자에게 보너스 값을 받아 User bonus에 값을 넣어줍니다~
import java.util.Random;
import java.util.Scanner;
public class Array_Lotto {
public static void main(String[] args) {
Random random=new Random();
Scanner sc= new Scanner(System.in);
int count=0;
int bonus,Userbonus;
int Lotto[]=new int[6];
int UserLotto[]=new int[6];
for(int i=0;i<6;i++) {
Lotto[i]=random.nextInt(45)+1;
//편의를 위해 입력받은 정수 값 출력
System.out.println(Lotto[i]);
}
for(int i=0;i<6;i++) {
System.out.println(i+1+"번째 숫자 입력:");
UserLotto[i]=sc.nextInt();
}
//보너스 숫자 랜덤으로 넣음
bonus=random.nextInt(45)+1;
//사용자의 보너스 숫자 입력
System.out.println("보너스 숫자 입력:");
Userbonus=sc.nextInt();
}
}
4. 자 이제 랜덤으로 숫자도 넣어줬고 입력도 받았으니 이제 입력받은 값과 설정된 값이 몇 개나 맞혔는지 비교해봐야겠죠?
코드가 길어지기 때문에 위에 부분을 자르고 값을 비교하는 코드 부분만 보여드리도록 하겠습니다.
for문을 사용했는데 이중 for문을 사용했습니다.
Lotto[0]일 때 UserLotto[0,1,2,3,4,5]의 값을 비교한 뒤 i의 증감식이 이루어지는 것이지요.
따라서 값이 맞을 때마다 count++이니 count의 변수가 증가되는 것입니다. 살짝 어렵죠..? 제가 그림을 잘 못 그려서 조금만 이해해주세요ㅜㅜ
//입력 받은 값 비교
for(int i=0; i<6; i++) {
for(int j=0;j<6;j++) {
if(Lotto[i]==UserLotto[j]) {
count++;
}
}
}
5. 이제 값의 비교가 끝났으니 1등인지 2등인지 등수를 비교하는 코드를 짜면 마무리가 됩니다.
if문을 사용해서 count를 비교해 줍니다.
else if문안에 if문을 넣어 bonus값이 맞았는지 여부에 따라 2등 3등을 구분 지어주었습니다.
if(count==6) {
System.out.println("축하드립니다 1등입니다!");
}
else if(count==5) {
if(bonus==Userbonus) {
System.out.println("축하드립니다! 2등입니다.");
}
else {
System.out.println("3등입니다!!");
}
}
else if(count==4) {
System.out.println("4등입니다!!");
}
else if(count==3) {
System.out.println("축하드립니다 5등입니다!");
}
else {
System.out.println("아쉽지만 다음 기회에");
}
출력 결과
쨕 쨕 1등이 당첨되었네요~
밑으로 전체 코드 보여드리겠습니다.
전체 코드
import java.util.Random;
import java.util.Scanner;
public class Array_Lotto {
public static void main(String[] args) {
Random random=new Random();
Scanner sc= new Scanner(System.in);
int count=0;
int bonus,Userbonus;
int Lotto[]=new int[6];
int UserLotto[]=new int[6];
for(int i=0;i<6;i++) {
Lotto[i]=random.nextInt(45)+1;
//편의를 위해 입력받은 정수 값 출력
System.out.println(Lotto[i]);
}
for(int i=0;i<6;i++) {
System.out.println(i+1+"번째 숫자 입력:");
UserLotto[i]=sc.nextInt();
}
//보너스 숫자 랜덤으로 넣음
bonus=random.nextInt(45)+1;
//사용자의 보너스 숫자 입력
System.out.println("보너스 숫자 입력:");
Userbonus=sc.nextInt();
//입력 받은 값 비교
for(int i=0; i<6; i++) {
for(int j=0;j<6;j++) {
if(Lotto[i]==UserLotto[j]) {
count++;
}
}
}
if(count==6) {
System.out.println("축하드립니다 1등입니다!");
}
else if(count==5) {
if(bonus==Userbonus) {
System.out.println("축하드립니다! 2등입니다.");
}
else {
System.out.println("3등입니다!!");
}
}
else if(count==4) {
System.out.println("4등입니다!!");
}
else if(count==3) {
System.out.println("축하드립니다 5등입니다!");
}
else {
System.out.println("아쉽지만 다음 기회에");
}
}
}
자 이상으로 로또 번호 생성기란 프로그램을 만들어 보았습니다. 내용이 조금 길어서 뭔가 설명이 아쉬운 부분도 있었을 것 같은데요 혹시 이해 안 되시는 부분 있으면 댓글로 남겨주시면 감사하겠습니다.
이상으로 긴 글 읽어주셔서 감사합니다!!
