ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA/자바] 제비뽑기 ( = 룰렛) 예제 [고정배열/Array]
    Language/Java 2018. 3. 11. 21:09
    반응형

    제비뽑기

    만들고 싶은 기능

    1. 고정배열 ( = Array ) 을 사용한다.

    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
    import java.io.*;
    import java.util.*;
     
    class DSG1{        // Drawing Straws Game 1
        FileReader fr;
        BufferedReader br;
        String fileName = "NameList.txt";
        String line;
        int count , i;
        String nameArray[];
     
        DSG1(){
            try{
                fr = new FileReader(fileName);
                br = new BufferedReader(fr);
                while((line = br.readLine()) != null){
                    if(line.length() != 0){
                        line = line.trim();
                        count++;
                    }
                }
                //System.out.println("몇줄인지 확인 : " + count); 메모장 줄 확인
            }catch(FileNotFoundException fnfe){
            }catch(IOException ioe){}
        }
     
        void saveName(){    // 배열에 사람이름을 넣는다.
            try{
                fr = new FileReader(fileName);
                br = new BufferedReader(fr);
                nameArray = new String[count];
                while((line = br.readLine()) != null){
                    if(line.length() != 0){
                        line = line.trim();
                        nameArray[i] = line;
                        //System.out.println(nameArray[i]);
                        i++;
                    }
                }
            }catch(FileNotFoundException fnfe){
                System.out.println(fileName + " : NOT FOUND");
            }catch(IOException ioe){}
        }
     
        void ranName(){
            Random random = new Random();
            int ran = random.nextInt(count);
            System.out.println("당첨자 : " + nameArray[ran]);
        }
     
        public static void main(String[] args){
            DSG1 dsg1 = new DSG1();
            dsg1.saveName();
            dsg1.ranName();
        }
    }
    cs




    5 , 6 줄 → 14 , 15 줄

    IO 입출력이다. 

    FileReader fr = new FileReader(fileName); 으로 

    fileName = "NameList.txt"; 을 읽는다.

    BuffredReader br = new BufferedReader(fr); 은 fr 

    즉 메모장으로 읽은 FileReader 을 BufferedReader 로 읽어서, 

    cmd 창에서 출력해주는 역할을 한다.

    16 줄

    While 반복문은 메모장이 몇줄인지 

    즉, 사람이 몇명 있는지 count++; 로써 확인을 하는 단계이다.

    line = br.readLine(); 한줄 읽는 것이 != null

    즉 빈공간이 아니라면, 하나씩 카운트를 증가 시킨다.

    그리하여 26줄이 확인 된다.

    즉 26명이 있다는 뜻이다.

    33 줄

    While 반복문은 String nameArray[] = new String[count]; 

    에서 count 는 26이니 방을 26개 만든다는 의미가 된다.

    그안에 사람의 이름을 집어넣으려는 로직이다.

    37줄

    그리고 출력해보니 모든 사람의 이름이 전부 나오는것을 확인 할 수 있다.

    46줄

    void ranName(){} 의 내용들은 랜덤로직이다.

    int ran = random.nextInt(count); 

    카운트를 넣은 이유는 방크기가 카운트 만큼이기 때문에 , 

    26명중에 랜덤이라는 의미이다.

    그렇기 때문에 출력 nameArray[ran]; 을 넣어 

    총크기 26중에서 랜덤을 하는 것이다.


    그리고 만약에 텍스트 파일이 없다면 다음과 같은 예외가 발생하게 된다.



    사실 복습하는 형식으로 했기 때문에 완벽하지 않고, 

    중복되는 로직이 있을 수 있습니다.

    더 효율적으로 수정하고 싶은데 도움을 주시면 감사하겠습니다.


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

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

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

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

    5. Array[] 고정배열 배우기.

    6. Random 함수 배우기.

    반응형
Designed by Tistory.