재밌고 어려운 IT를 이해해보자~!

리스트로 수정해보는 로또 본문

교육전 개인공부

리스트로 수정해보는 로또

언제나즐거운IT 2023. 10. 29. 13:11

리스트를 사용한 로또

package lottoExam2;

import java.util.ArrayList;
import java.util.Collections;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Scanner;

public class ListLottoExam {

	public static void main(String[] args) {
		//45개 공을 담을 리스트
		List<Integer> balls = new ArrayList<>();
		//로또를 저장할 리스트
		List<Integer> lotto = new ArrayList<>();
		//보너스번호 저장
		int bonusNumber = 0;
		
		//45개의 공 생성
		for(int i=0; i<45; i++) {
			balls.add(i+1);
		}
		
		
		//컬렉션 프레임워크를 도와주는 클래스 Arrays와 동일 역할
		
		Collections.shuffle(balls); // 지원해주는 섞는기능
		
		//공을 추첨
		int count =0;
		while(count <7) {
			//리스트를 섞는다
			Collections.shuffle(balls); 
			
			if(count <6) {
				lotto.add(balls.get(0)); //앞에서부터 뽑는걸한다. get(0)은 
				//ball list의 0번째 인덱스 값을 뜻한다
				//중복제거를 위햐 공을 지욷다.
				balls.remove(0);
			}else {
				bonusNumber = balls.get(0);
			}
			count++ ; // 꺼냔공개수 증가 
			
		}
		System.out.println("로또 :" + lotto + "보너스 번호 ㅣ" + bonusNumber);
		
		//사용자 로또
		count = 0;
		Scanner scan = new Scanner(System.in);
		List<Integer> myLotto = new ArrayList<>();
		//사용자 로또 선택
		while(count < 6) {
			try {
			System.out.println((count+1) +"번째 로또 :");
			int ball = scan.nextInt(); //입력된게 버퍼에 남기때문에 무한루프를돌아 버퍼를 비워야한다
			//flush기능 
			//nextLine의 첫번째기능은 찌꺼기 제거기눙.
			//하지만 nextLine도 찌꺼기가 있으면 잘 작동하지 않기 때문에 중간에 한번 더 써줘야한다.
			//공의 범위 체크
			if (ball <1 || ball >45 ) {
//				System.out.println("입력범위는 1~45 입니다.");
//				continue; // 여기서 종료 후 다시시작
				throw new InputMismatchException("키입력 1~45");
			}
			//해당 값이 리스트에 존재하는지 확인
			if(myLotto.contains(ball)) {
				System.out.println(ball + "번호는 이미 선택하셨습니다.");
				continue;
		
				
			}
			
			myLotto.add(ball);
			count++;
			}catch (InputMismatchException e) {
				//키입력 버퍼에 찌꺼기 제거 - flush -> auto flush
				scan.nextLine(); //두가지기능으로 쓰인다 키입력 or 찌꺼기 제거 
				//next 와 nextline 차이 
				//next는 띄어쓰기가 안된다. 홍 길동 공백이 있으면 끝으로 봐서 길동은 찌꺼기가된다.
				//nextline은 한 라인 전부를 버퍼에 저장 찌꺼기가 남지않음 라인에대해서는
				System.out.println(e.getMessage() == null ? "키입력이 잘못돼었습니다." : e.getMessage());
			}
		}
		//사용다한 스캐너 종료
		scan.close();
		
		//비교를 위한 객체
		List<Integer> matchNumbers = new ArrayList<>();
		int matchCount =0;
		boolean isBonus = false;
		for(int myBall : myLotto) {
			//내가 선택한 번호가 로또 번호중에 있다면
			if(lotto.contains(myBall)) {
				//저장
				matchNumbers.add(myBall);
			}
			
			//보너스번호를 못찾을때만 비교
			if(!isBonus) {
				//내공번호와 보너스번호가 같다면
				if(myBall == bonusNumber) {
					isBonus = true;
				
//			for(int ball : lotto) {
//				if(myball == ball) {
//					matchNumbers.add(myBall);
				}
			}
		}
		
		matchCount = matchNumbers.size();
		
		System.out.print("당첨번호 : " + matchNumbers);
		System.out.println(matchCount==5 && isBonus ? ", 보너스번호 : " + bonusNumber : " ");
		
		if(matchCount ==6) {
			System.out.println("대박 로또 1등");
		}else if(matchCount == 5 && isBonus) {
			System.out.println("대박 로또 2등");
		}else if(matchCount == 5 ) {
			System.out.println("대박 로또 3등");
		}else if(matchCount == 4 ) {
			System.out.println("대박 로또 4등");
		}else if(matchCount == 3 ) {
			System.out.println("대박 로또 5등");
		}else {
			System.out.println("꽝");
		}
	}
}

 

 

배열을 사용한 로또

		// 로또당첨기원
	 		
	 	int LottoMachine[] = new int[45];
	 	int LottoBall[] = new int[6];
	 	
	 	for (int i=0 ; i<45 ; i++) {
	 		LottoMachine[i] = i+1;
	 	}
	 	int ballcount =0;
	 	int bonusnumber =0;
	 	while (ballcount <7) {
	 		int index = (int)(Math.random()*45);
	 		// 공을 찾고 나면 그 위치를 0 으로 바꾼다
		 	// 선택된 인덱스의 값이 0이면 사용 아니면 미사용
		 	
	 		if (LottoMachine[index] != 0) {
	 			
	 			if (ballcount <6) {
	 				LottoBall[ballcount++] = LottoMachine[index]; 
	 			} else {
	 				bonusnumber = LottoMachine[index];
	 				ballcount ++;
	 			}
	 			LottoMachine[index] = 0;
	 		}
	 		
	 	}
	 	System.out.print("로또 번호는 !!! -> ");
	 	for (int i=0; i<LottoBall.length; i++) {
	 		System.out.print(LottoBall[i] +" ");
	 	}
		System.out.println("보너스 넘버 : " + bonusnumber );
	 	
		Scanner scan = new Scanner(System.in);
		
		int userLotto[] = new int[6];
		count = 0;
		while (count<6) {
			
			System.out.println( (count+1) + " 번째 로또번호를 입력하세요 : ");
			int balls = scan.nextInt();
			
			//유저 로또번호 중복체크
			for (int i=0; i<count; i++) {
				if(userLotto[i] == balls) {
					balls = 0; //중복되었다는 의미
					break;
				}
			}
		
			if(balls !=0 ) {
				userLotto[count++] = balls;
			}
		}
			scan.close();
			System.out.println("사용자 로또 : ");
			for (int i=0; i<LottoBall.length; i++) {
			System.out.println(userLotto[i] + " ");
		}
			System.out.println();
			int matchcount =0;
			boolean isBonus = false;
			
	 	// match 카운트로 당첨등수 확인
			for (int i=0; i<LottoMachine.length; i++) {
				for (int j=0; j<userLotto.length; j++) {
					if ( LottoMachine[i]==userLotto[j]) {
						matchcount ++;
						break;
					}
				}
				
				if (!isBonus) {
					if(userLotto[i] == bonusnumber){
						isBonus = true;
					}
				}
			}
	 	
			
			if(matchcount == 6) {
				System.out.println("1등");
			}
			else if(matchcount == 5 && isBonus) {
				System.out.println("2등");
			}
			else if(matchcount == 4) {
				System.out.println("3등");
			}
			else if(matchcount == 3) {
				System.out.println("4등");
			}

'교육전 개인공부' 카테고리의 다른 글

CSS, HTML  (2) 2023.12.28
MVC Pattern Self Practice  (1) 2023.12.18
파일 입출력  (0) 2023.10.28
쓰레드  (0) 2023.10.26
정렬, 비교, 람다  (0) 2023.10.25
Comments