-
[JAVA/자바] 제비뽑기 다수 인원 뽑기 [가변배열/Vector/Hashtable]Language/Java 2018. 3. 15. 22:22반응형
제비뽑기 ( 다수 인원 뽑기)
만들고 싶은 기능
1. 가변 배열을 사용한다.
2. 메모장에 이름을 입력하여 , 추가 및 제거 ,
즉 수정을 손쉽게 하고 싶다.
3. 랜덤으로 선정한다.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798import java.io.*;import java.util.*;class DSG4{ // Drawing Straws Game 4String 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 값을 이용
슬슬 제비뽑기에 대해서 지루하다고 생각이 들수도 있지만,
조금만 더 인내하여 공부해 주세요.
제비뽑기 실습을 제가 종률별로 배우고 하기도 했고,
여태까지 배웠던 여러가지를 한번에 이용할수 있어 굉장히 좋다고 생각합니다.
반응형'Language > Java' 카테고리의 다른 글
[JAVA/자바] 파일 이동 ( 복사 / 삭제 ) (0) 2018.03.19 [JAVA/자바] 달력 ( Calendar ) 만들기 (3) 2018.03.17 [JAVA/자바] 제비뽑기 확률 조정 100% 까지 [가변배열/Vector/ArrayList] (0) 2018.03.14 [JAVA/자바] 제비뽑기 확률 조정 [가변배열/배열] (0) 2018.03.14 [JAVA/자바] 제비뽑기 ( = 룰렛) 예제 [고정배열/Array] (0) 2018.03.11