-
[JAVA/자바] 제비뽑기 확률 조정 [가변배열/배열]Language/Java 2018. 3. 14. 09:36반응형
제비뽑기 (확률 조정 가능)
만들고 싶은 기능
1. 가변배열 ( = Collection/Map ) 을 사용한다.
2. 메모장에 이름을 입력하여 , 추가 및 제거 ,
즉 수정을 손쉽게 할 수 있어야 한다.
3. 랜덤으로 선정한다.
4. 확률을 조작할수 있어야 한다.
알고리즘(순서&절차)
(1) 파일을 불러온다
(2) 파일의 이름과 확율을 나눠서 변수 저장한다
(3) 랜덤 숫자를 뽑아서 그것에 맞는 idx의 당첨자 출력
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576import java.io.*;import java.util.*;class DSG2{ // Drawing Straws Game 2String fileName = "NameList.txt";FileReader fr;BufferedReader br;Random random = new Random();String name;int rate;Vector<String> vtNameList = new Vector<String>(); // Vector Name Listvoid checkSize(){String line = null;try{fr = new FileReader(fileName);br = new BufferedReader(fr);int size = 0;while((line=br.readLine()) != null){line = line.trim();if(line.length() != 0){if((line.indexOf(" ")) != -1){name = separate(line);vtNameList.add(name); // 숫자를 가진 사람}else{vtNameList.add(line); // 숫자가 없는 사람}size++;}}}catch(FileNotFoundException fnfe){System.out.println(fileName + " : CAN'T FOUND");}catch(IOException ioe){}}String separate(String str){int idx = str.indexOf(" ");name = str.substring(0 , idx);//System.out.println("name : " + name); // 숫자가 있는 이름 확인용String rStr = str.substring(idx);rStr = rStr.trim();try{rate = Integer.parseInt(rStr);if(rate < 0){System.out.println("확률이 0보다 작아서 0으로 설정합니다. : " + rate);rate = 0;}else if(rate > 100){System.out.println("확률이 100보다 커서 100으로 설정합니다. : " + rate);rate = 100;}//System.out.println("rate 확인 : " + rate); // 숫자 확인}catch(NumberFormatException nfe){System.out.println("파일의 확률이 잘못 되었습니다.");}return name;}void ran100(){int ran = random.nextInt(100);//System.out.println("ran : " + ran); // 랜덤 확인용if(ran < rate){System.out.println("당첨자 : " + name);}else{vtNameList.remove(name);ran = random.nextInt(vtNameList.size());System.out.println("당첨자 : " + vtNameList.get(ran));}}public static void main(String[] args){DSG2 dsg2 = new DSG2();dsg2.checkSize();dsg2.ran100();}}cs 6 , 7 줄 → 17 , 18 줄
IO 입출력이다.
FileReader fr = new FileReader(fileName); 으로
fileName = "NameList.txt"; 을 읽는다.
BuffredReader br = new BufferedReader(fr); 은 fr
즉 메모장으로 읽은 FileReader 을 BufferedReader 로 읽어서,
cmd 창에서 출력해주는 역할을 한다.
37줄
String separate(String str){} 메소드는 인덱스를 확인하고 ,
확률 또한 확인하는 메소드이다.
JJJJ 의 확률은 60 이다.
그래서 ran 이 60 개의 방을 할당하여 , 60 밑이라면 JJJJ가 나오게 된다.
그리고 ran 이 60 이상이라면 JJJJ이외의 나머지 인원들에서 랜덤을 돌리게 된다.
65줄
vtNameList.remove(name); 은 확률이 있는 사람의 이름을 지우는 것이다.
1. IO ( FileReader , BufferedReader ) 을 배우기.
반응형'Language > Java' 카테고리의 다른 글
[JAVA/자바] 제비뽑기 다수 인원 뽑기 [가변배열/Vector/Hashtable] (0) 2018.03.15 [JAVA/자바] 제비뽑기 확률 조정 100% 까지 [가변배열/Vector/ArrayList] (0) 2018.03.14 [JAVA/자바] 제비뽑기 ( = 룰렛) 예제 [고정배열/Array] (0) 2018.03.11 [JAVA/자바/TIP2] FileReader ( cmd 창에 txt 파일 읽기/출력하기 ) (2) 2018.03.05 [JAVA/자바/TIP1] substring ( 문자열분리 ) (2) 2018.03.05