자바 프로그래밍/코드
로또 시뮬레이터
구리Guri
2020. 2. 12. 23:07
import java.util.Scanner;
//로또 시뮬레이터
/*
당첨 번호를 랜덤으로 먼저 뽑고
유저가 번호를 카드섞기로 랜덤으로 뽑으면서 시도
당첨번호를 뽑기 위해 돌리는 것과 와 유저가 번호를 뽑기 위해 돌리는 것의 while 따로 해야함.
메뉴 1번 숫자직접입력
메뉴2번 자동입력
로또번호를 무작위로 뽑앗는데
내가 몇장이나 사면 1등이 될 수 있을까???
로또시뮬레이터
숫자 6개+ 보너스 번호
-----------------------------------------------------------------------
Q.1등이 걸릴때까지 총 몇회를 시도하였는가?
Q.게임이 천원씩이라고 했을때 1등이 당첨되었을때 얼마나 썼는가?
Q.당첨확률?
그동안
2등,3등,4등,5등 은 몇번 당첨되었는가?
등수별 총상금, 당첨횟수, 확률=당첨횟수/총시도횟수
1등 -> 당첨번호 6개 일치
2등 -> 당첨번호 5개 일치 + 보너스 숫자 일치
3등 -> 당첨번호 5개 일치
4등 -> 당첨번호 4개 일치
5등 -> 당첨번호 3개 일치
*/
public class Quiz_08 {
public static void main(String[] args) {
//입력을 위한 것
Scanner sc = new Scanner(System.in);
//변수 선언하기 시작
int menu=0; //자동,수동 선택
int re_menu=0;
int[] numbers= new int[45]; //1~45 숫자 만들기용
int[] thisweek_number= new int[6]; //금주 당첨 번호 6개
int thisweek_bonusnumber;//금주당첨 보너스번호
//int[] autonumbers= new int[6]; //자동 번호 6개
//int autonumbers_bonusnumber; //자동 보너스번호
int[] mynumbers= new int[6]; //수동번호 6개
//int mynumbers_bonusnumber; //수동 보너스번호
int wow=0; //맞은번호 카운트 선언 및 초기화
int wowbonus=0; //보너스번호 맞은거 카운트 선언 및 초기화
long try_count=0; //총시도횟수
long try_money=0; //총사용비용
//상금
int winner1_price=1600000000;
int winner2_price=56000000;
int winner3_price=1400000;
int winner4_price=50000;
int winner5_price=5000;
//1등 집계용
long winner1_total=0;
long winner1_count=0;
//2등 집계용
long winner2_total=0;
long winner2_count=0;
//3등 집계용
long winner3_total=0;
long winner3_count=0;
//4등 집계용
long winner4_total=0;
long winner4_count=0;
//5등 집계용
long winner5_total=0;
long winner5_count=0;
//확률
double winner1_odds=0d;
double winner2_odds=0d;
double winner3_odds=0d;
double winner4_odds=0d;
double winner5_odds=0d;
//변수 선언하기 끝
//1~45숫자 만들기
for(int i=0;i<45;i++) {
numbers[i]=i+1;
}
while(true) {
//금주의 로또당첨번호 뽑기용 카드섞기
for(int i=0;i<100;i++) {
int x=(int)(Math.random()*(44-0+1)+0);
int y=(int)(Math.random()*(44-0+1)+0);
int temp;
temp =numbers[x];
numbers[x]=numbers[y];
numbers[y]=temp;
}
//금주의 로또당첨번호 가져오기
for(int i=0;i<6;i++) {
thisweek_number[i]=numbers[i];
}
thisweek_bonusnumber=numbers[7];
//자동, 수동으로 할지 선택
while(true) {
System.out.println("**********************************");
System.out.println("**** 로 또 시 뮬 레 이 터 *****");
System.out.println("*********************************");
System.out.println("1.수동번호 한번 구매");
System.out.println("2.1등이 될 때까지 자동번호 구매");
System.out.println("3.종료");
System.out.print("메뉴선택 > ");
menu=Integer.parseInt(sc.nextLine());
if(menu==1){
try_count=0;
while(true) { // 수동번호를 구매하기로 함
System.out.println("******* 수 동 번 호 구 매 ******");
System.out.println("*******구입하려는 번호를 입력하세요.******");
for(int i=0;i<6;i++) {
System.out.print((i+1)+"번째 구매번호 : ");
mynumbers[i]=Integer.parseInt(sc.nextLine());
}
try_count++;
//일치하는 숫자 있는지 확인
for(int i=0;i<6;i++) {
for(int j=0;j<6;j++) {
if(mynumbers[i]==thisweek_number[j]) {
wow=wow+1;
}
if(mynumbers[i]==thisweek_bonusnumber) {
wowbonus=1;
}
}
}
//구입한 수동 로또 번호 출력
System.out.println();
System.out.println("구매한 수동 번호");
for(int i=0;i<6;i++) {
System.out.print("("+mynumbers[i]+") ");
}
//구입한 수동 로또 번호 출력 끝
//일치하는 숫자 있는지 끝
if(wow==6) {
System.out.println(" 1등 당첨!!!!!!");
winner1_total+= winner1_price;
winner1_count++;
break;
}else if(wow==5){//2등과 3등 판별
//당첨번호가 5개 일치하면서 보너스 숫자가 일치하는지 확인
if(wowbonus==1)
{
System.out.print(" 2등 당첨!!!!!!");
winner2_total+= winner2_price;
winner2_count++;
}
//3등 당첨
System.out.println(" 3등 당첨!!!");
winner3_total+= winner3_price;
winner3_count++;
}else if(wow==4) {
System.out.println(" 4등 당첨!!!");
winner4_total+= winner4_price;
winner4_count++;
}else if(wow==3) {
System.out.println(" 5등 당첨!!!");
winner5_total+= winner5_price;
winner5_count++;
}else {
System.out.println(" 꽝ㅠㅠ");
}
System.out.println();
break;
}
}else if(menu==2){
try_count=0;
//1등 될때까지 자동번호 시도하기
while(true) {
try_count++;
wow=0; //맞은번호 카운트 선언 및 초기화
wowbonus=0; //보너스번호 맞은거 카운트 선언 및 초기화
// 자동번호 뽑기용 카드섞기
for(int i=0;i<100;i++) {
int x=(int)(Math.random()*(44-0+1)+0);
int y=(int)(Math.random()*(44-0+1)+0);
int temp;
temp =numbers[x];
numbers[x]=numbers[y];
numbers[y]=temp;
}
//자동번호 가져오기
for(int i=0;i<6;i++) {
mynumbers[i]=numbers[i];
}
//autonumbers_bonusnumber=numbers[7];
System.out.print(try_count+"번째 구입한 로또 : ");
for(int i=0;i<6;i++) {
System.out.print("("+mynumbers[i]+") ");
}
System.out.print("\t");
//System.out.print(" 보너스 :" + autonumbers_bonusnumber +"\t");
//일치하는 숫자 있는지 확인
for(int i=0;i<6;i++) {
for(int j=0;j<6;j++) {
if(mynumbers[i]==thisweek_number[j]) {
wow=wow+1;
}
if(mynumbers[i]==thisweek_bonusnumber) {
wowbonus=1;
}
}
}
//일치하는 숫자 있는지 끝
if(wow==6) {
System.out.println(" 1등 당첨!!!!!!");
winner1_total+= winner1_price;
winner1_count++;
break;
}else if(wow==5){//2등과 3등 판별
//당첨번호가 5개 일치하면서 보너스 숫자가 일치하는지 확인
if(wowbonus==1)
{
System.out.print(" 2등 당첨!!!!!!");
winner2_total+= winner2_price;
winner2_count++;
}
//3등 당첨
System.out.println(" 3등 당첨!!!");
winner3_total+= winner3_price;
winner3_count++;
}else if(wow==4) {
System.out.println(" 4등 당첨!!!");
winner4_total+= winner4_price;
winner4_count++;
}else if(wow==3) {
System.out.println(" 5등 당첨!!!");
winner5_total+= winner5_price;
winner5_count++;
}else {
System.out.println(" 꽝ㅠㅠ");
}
System.out.println();
}
//1등 될때까지 자동번호 시도하기 끝
}else if(menu==3) {
System.exit(0);
}
break;
}
//집계 및 출력
try_money=try_count*1000; //총 구매금액 = 총시도횟수*1000원
winner1_odds=winner1_count/(double)try_count;
winner2_odds=winner2_count/(double)try_count;
winner3_odds=winner3_count/(double)try_count;
winner4_odds=winner4_count/(double)try_count;
winner5_odds=winner5_count/(double)try_count;
//금주의 로또 당첨 번호 출력
System.out.println();
System.out.println("***** 금주의 로또 당첨 번호 *****");
for(int i=0;i<6;i++) {
System.out.print("("+thisweek_number[i]+") ");
}
System.out.print("\t 보너스 :" + thisweek_bonusnumber);
System.out.println();
System.out.println();
System.out.println("총 구매횟수 : " + try_count);
System.out.println("총 구매금액 : " + try_money);
System.out.println();
System.out.println("1등 당첨 횟수 : " + winner1_count + "\t1등 당첨 누적총상금 : " + winner1_total + "\t당첨 확률 : " + winner1_odds);
System.out.println("2등 당첨 횟수 : " + winner2_count + "\t2등 당첨 누적총상금 : " + winner2_total + "\t당첨 확률 : " + winner2_odds);
System.out.println("3등 당첨 횟수 : " + winner3_count + "\t3등 당첨 누적총상금 : " + winner3_total + "\t당첨 확률 : " + winner3_odds);
System.out.println("4등 당첨 횟수 : " + winner4_count + "\t4등 당첨 누적총상금 : " + winner4_total + "\t당첨 확률 : " + winner4_odds);
System.out.println("5등 당첨 횟수 : " + winner5_count + "\t5등 당첨 누적총상금 : " + winner5_total + "\t당첨 확률 : " + winner5_odds);
System.out.println("초기메뉴로 돌아가겠습니까? (1.Y/2.N)");
re_menu=Integer.parseInt(sc.nextLine());
if(re_menu==1) {
continue;
}
}
} //main 끝
}