본문 바로가기

Projects

로또 번호 추출해서 인생 한방 노리기

학원에서 팀 프로젝트가 끝나고 살짝의 방황과 정처기 실기 준비로 인해 코드와는 살짝쿵 멀어졌었는데 다시 스스로 과제를 주면서 다시금 하나하나 구현해나가는 재미를 오랜만에 느끼고 있는 요즘! 

 

새롭게 게시판을 만들기 전 이클립스에서 인텔리제이로 넘어오면서 아직은 뭔가 낯설게 느껴져서 스프링을 하기전 간단한 프로그램 뭐 없나 생각하다가 학원 다닐때 만들었던 로또 출력했던 프로그램이 생각나서 다시 한번 구현해보았다. 그때는 조금 이해하지 못하고 서툰 느낌도 있었는데 확실히 이제는 더 완벽히 이해하고 만드는 느낌이라 더 재미있게 했던거 같다! (사실 이때도 재밌게 만들면서 다같이 각자 이 번호로 로또사서 당첨되면 내일부터 다 안나옵니다 하며 까불었지만 역시나 모두들 다음날에도 다같이 교실에서 만났다는...ㅋㅋㅋㅋㅋ 웃프다ㅋㅋㅋㅋㅋㅋㅋㅋ....)

 

package example;

import java.util.Random;
import java.util.Scanner;

class  Lotto{
    int[] set; //한세트에 저장될 로또 번호
    int buyNum; //구매한 로또 수

    public Lotto() {
        set = new int[6]; //로또 6개의 수가 들어갈 수 있는 배열 개수 선언
    }

    public void inputBuyNum(){ //몇장을 구입할건지 입력 받음
        Scanner scanner = new Scanner(System.in);
        System.out.print("구매횟수를 입력하세요 : ");
        buyNum = scanner.nextInt(); //구매한 로또의 개수를 buyNum이라는 변수에 담아두기
    }

    public void selectLotto(){
        boolean check; //중복된 수가 있는지 확인하는 변수
        Random random = new Random();
        set[0] = random.nextInt(45)+1; //일단 첫번째 수에 난수를 저장하고
        //인덱스는 0부터 시작하기 때문에 로또에는 0이 없으니 +1을 해준다

        for(int i=1; i<set.length; ){
            set[i] = random.nextInt(45)+1; //인덱스1번은 우리가 생각하는 2번이기 때문에 처음에 두번째 수를 저장하고
            check = false; //새로 들어온 값이 중복인지를 체크한다.
            for(int b=0; b<i; b++){ //비교는 첫번째인 0의 자리부터 시작
                if(set[i] == set[b]){ //저장된 번호와 새로 들어온 난수가 같은 번호라면
                    check = true; //중복이므로
                    break; // for문을 빠져나간다
                }
            }
            if(!check) i++; //중복이 아닐때만 i값을 ++시켜 다음 자리로 이동
        }
    }
    public void sort(){ //오름차순으로 로또 수 정렬
        for(int x=0; x<set.length; x++){ //기준값
            for (int y =x+1; y<set.length; y++){ //비교값
                if(set[x] > set[y]){ //배열 앞의 자리 수가 뒤에 자리수보다 크다면 바꿔야하므로
                    int temp = set[x]; //temp라는 변수에 x의 값을 임시로 담아 놓고
                    set[x] = set[y]; //x자리의 값은 더 작았던 y의 값으로 가져오고
                    set[y] = temp; //y의 값에 temp에 넣어두었던 x의 값을 가져온다 *작은수를 앞으로 위치 바꾸기
                }
            }
        }
    }
    public void outputResult(){ //랜덤으로 돌린 로또 번호 출력
        for (int i=0; i<set.length; i++){
            System.out.printf("%3d",set[i]); //3칸으로 맞춰서 출력해주세요 (출력수가 자릿수마다 땡겨져서 중구난방이 아니라 깔끔해짐)
        }
        System.out.println(); //배열 하나 출력할때마다 줄넘김
    }
    public void doLotto(){
        inputBuyNum(); //입력개수를 물어보는 메소드 호출 후
        for(int i=0; i<buyNum; i++){ //내가 산 개수만큼 출력해주기
            selectLotto(); //로또 번호 뽑아오고
            sort(); //정렬해서
            outputResult(); //출력하기
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Lotto lotto = new Lotto(); //로또 객체를 생성하여
        lotto.doLotto(); //실행합니다!
    }

}

원래는 한 소스파일에 클래스 하나씩 만들어야 하지만 간단한 프로그램이니까 그냥 한 소스파일에 모두 넣었다..!

(하지만 원래는 한 소스파일에 클래스 하나씩!!)