원하는 범위에서 당첨자를 뽑는 코드 - 로또 번호 뽑기 코드 [Java]

Denia·2022년 6월 4일
0

오늘 실전 프로젝트를 마무리 지으면서 지금까지 우리 서비스를 이용해주시고 피드백 이벤트에 참여해주신 분들을 선발해서 상품을 보내드려야 하는 일이 있었다.

그래서 Java로 당첨자를 뽑는 로직을 구성했고 해당 로직을 이용해서 당첨자를 뽑아서 상품들을 보내드렸다.

뭔가 상당히 소소하지만 이럴때 코딩을 써먹으면 재미도 있고 나름의 보람도 있다. 😀

Github Repo 링크

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in); // Scanner 객체 생성

        System.out.println("원하시는 최소 숫자 범위를 정해주세요. [ 0 or 양의 정수 입력 ] Ex - 3");
        int minRange = sc.nextInt(); //최소 당첨번호. 해당 번호를 시작으로 당첨 번호를 뽑는다.
        if(minRange < 0){
            System.out.println("입력 값 :" + minRange + " -- 잘못 입력하셨습니다!!!");
            return;
        }

        System.out.println("원하시는 최대 숫자 범위를 정해주세요. [0 or 양의 정수 입력 ※최소 숫자 범위보다 크게 적어주세요] Ex - 15");
        int maxRange = sc.nextInt(); //최대 당첨번호. 해당 번호까지를 마지막으로 당첨 번호를 뽑는다.
        if(maxRange <= minRange){
            System.out.println("입력 값 :" + maxRange + " -- 최소 입력값 이하의 값을 적어주셨습니다.");
            return;
        }

        System.out.println("원하시는 당첨자 수를 정해주세요. [0 제외 양의 정수 입력] Ex - 5");
        int winners = sc.nextInt();
        if(winners <= 0){
            System.out.println("입력 값 :" + winners + " -- 당첨자는 0명 및 음수가 될 수 없습니다.");
            return;
        }else if(winners > (maxRange - minRange + 1)){
            System.out.println("입력 값 :" + winners + " -- 당첨자의 수가 요청하신 숫자 범위 보다 많습니다.");
            return;
        }
        int winnersCount = 0; //당첨자를 셀 변수

        boolean[] winnersArray = new boolean[maxRange - minRange + 1]; //당첨자를 저장할 배열 , 예를 들어 5 ~ 8 까지면 5 6 7 8 이므로 8-5+1가 된다.

        while (winnersCount < winners){ //당첨자를 뽑는 로직
            int selcetedRandNum = (int) (Math.random() * (maxRange - minRange + 1)); // 랜덤으로 숫자 뽑기

            if(!winnersArray[selcetedRandNum]){ //뽑아낸 숫자를 배열에 넣어서 당첨자를 저장
                winnersArray[selcetedRandNum] = true;
            }else{ //기존에 당첨이 되어있는 경우면 다시 당첨자를 뽑는다.
                continue;
            }

            winnersCount ++;
        }

        /* 당첨자를 표시하는 로직 */
        System.out.print("당첨자 번호 : [ ");
        winnersCount = 0;
        for (int i = 0; i < winnersArray.length; i++) { //배열의 첫 인덱스부터 읽어서 표시하기 때문에 자연스럽게 오름차순으로 표시됨.
            if (winnersArray[i]) { //true 값만 표현
                System.out.print(i + minRange);
                winnersCount++;
                if(winnersCount < winners){
                    System.out.print(",");
                }
            }
        }

        System.out.print(" ]");
    }
}
profile
HW -> FW -> Web

0개의 댓글