ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA/자바] 제비뽑기 다수 인원 뽑기 [가변배열/Vector/Hashtable]
    Language/Java 2018. 3. 15. 22:22
    반응형


    제비뽑기 ( 다수 인원 뽑기)

    만들고 싶은 기능

    1. 가변 배열을 사용한다.

    2. 메모장에 이름을 입력하여 , 추가 및 제거 ,

    즉 수정을 손쉽게 하고 싶다.

    3. 랜덤으로 선정한다.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    import java.io.*;
    import java.util.*;
     
    class DSG4{        // Drawing Straws Game 4
        String fileName = "NameList.txt";
        FileReader fr;
        BufferedReader br;
        Random random = new Random();
        int nameNum;
        int listNum;
     
        Hashtable<Integer , String> totalList = new Hashtable<Integer , String>();
        Vector<Integer> numberList = new Vector<Integer>();
     
        void inputPath(){    // 자신이 사용하고 싶은 메모장 파일을 불러온다.
            br = new BufferedReader(new InputStreamReader(System.in));
            try{
                System.out.println("[ ENTER 키 ] 를 누르면 DEFAULT : " + fileName + " 이 실행됩니다.");
                System.out.println("TEXT 파일 이름을 입력해주세요.");
                String textName = br.readLine();
                textName = textName.trim();
                if(textName.length() == 0){
                    return;
                }else{
                    fileName = textName;
                }
            }catch(IOException ioe){}
        }
     
        void inList(String str){
            totalList.put(listNum , str);
            numberList.add(listNum);
            listNum++;
        }
     
        void readFile(){
            try{
                fr = new FileReader(fileName);
                br = new BufferedReader(fr);
                String name = "";
                while((name = br.readLine()) != null){
                    name = name.trim();
                    if(name.length() != 0){
                        inList(name);
                        //System.out.println("명단 : " + name);    // 확인용
                    }
                }
            }catch(FileNotFoundException fnfe){
                System.out.println(fileName + ": CAN'T FOUND\n다시 실행 해주세요.");
                System.exit(0);
            }catch(IOException ioe){}
        }
     
        void inputNumber(){
            System.out.println("몇명의 당첨자를 뽑고 싶으십니까? <Default : 1명 , 인원수 : " + totalList.size() + " 명 >");
            System.out.print("입력 : ");
            try{
                br = new BufferedReader(new InputStreamReader(System.in));
                String numStr = br.readLine();
                numStr = numStr.trim();
                nameNum = Integer.parseInt(numStr);    // 입력 값.
                if(nameNum < 1){
                    System.out.println("최소 1명의 당첨자는 나와야 합니다.\nDefault : 1명 으로 실행합니다.");
                    nameNum = 1;
                    randomPoint();
                }else if(nameNum > listNum){
                    System.out.println("현재 메모장의 인원수 : " + totalList.size() + "\n다시 입력합니다.");
                    inputNumber();
                }else{
                    randomPoint();
                }
            }catch(IOException ioe){
                System.out.println("숫자가 아닙니다.\n다시 입력합니다.");
                inputNumber();
            }catch(NumberFormatException nfe){
                System.out.println("최소 1명의 당첨자는 나와야 합니다.\nDefault : 1명 으로 실행합니다.");
                    nameNum = 1;
                    randomPoint();
            }
        }
     
        void randomPoint(){
            for(int i=0 ; i<nameNum ; i++){
                int randInt = random.nextInt(numberList.size());
                int count = numberList.get(randInt);
                System.out.println((i+1+ " 당첨자 : " + totalList.get(count));
                numberList.remove(randInt);    // 중복으로 당첨자를 출력하면 안되기 때문에 , 출력된후 지운다.
            }
        }
     
        public static void main(String[] args){
            System.out.println("<< 제비뽑기 게임 >>");
            DSG4 dsg4 = new DSG4();
            dsg4.inputPath();
            dsg4.readFile();
            dsg4.inputNumber();
        }
    }
    cs


            

    1. animal.txt              2.NameList.txt


    ■결과 1

    default 값으로 실행


    결과 2

    text 경로를 입력하여 animal.txt 을 가져와서 이용


    결과3

    입력값이 메모장의 인원수를 초과하는 경우 재입력 요구


    결과 4

    입력값이 한글일때 defualt 값을 이용


    슬슬 제비뽑기에 대해서 지루하다고 생각이 들수도 있지만,

    조금만 더 인내하여 공부해 주세요.

    제비뽑기 실습을 제가 종률별로 배우고 하기도 했고,

    여태까지 배웠던 여러가지를 한번에 이용할수 있어 굉장히 좋다고 생각합니다.


    1. IO ( FileReader , BufferedReader ) 을 배우기.

    2. try{}catch(){} 예외처리 배우기.

    3. while{} 반복문 배우기.

    4. if{} 조건문 배우기.

    5. MAP 가변배열 배우기.

    6. Random 함수 배우기.

    7. 제비뽑기 예제 고정배열 보기.

    8. 제비뽑기 예제 가변배열 보기.

    9. 제비뽑기 예제 확률조정 좁기.

    반응형
Designed by Tistory.