Java 로또 : 랜덤으로 1개 뽑기
메모장에 사람들 이름이 1줄에 1개씩 총 23개의 이름 리스트가 있다고 할 때,
이 중에서 한 명만 랜덤으로 뽑으려면 다음 작업이 필요하다.
1.랜덤수를 발생한다.
2.명단을 읽으면서 해당 랜덤수까지만 반복문 돌린다
3.당첨자만 출력한다
1. 랜덤수 만든다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import java.util.*; import java.io.*; class Lotto { String fname = "우리반명단.txt"; Random r = new Random(); int count = 23; int i; //i는 메소드 안에서도 써야하니까 멤버변수로 빼준다 Lotto(){ i = r.nextInt(count); System.out.println("i: " + i); } | cs |
랜덤수를 i로, 생성자 안에 만든다.
i = r.nextInt(count) -> 선택값(뽑히는 랜덤수)을 i로 받는다. 0 ~ (count-1)
count가 23이니까 count-1 = 22
랜덤은 0~22까지 돈다.
2. 명단을 해당 랜덤수까지 반복문 돌린 후,
랜덤수와 명단 line이 일치하면 해당 라인을 출력
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | void read(){ FileReader fr = null; BufferedReader br = null; try{ fr = new FileReader(fname); br = new BufferedReader(fr); String line = null; int j=0; //23번 돌 변수(라인) j만들어주고 밑에서 i랑 비교해줌 while((line=br.readLine()) != null){ if(j==i) { //랜덤수와 명단line 이 일치하면 해당 라인을 출력해라 System.out.println("당첨자: "+line); break; //if는 조건문이니까 while 반복문 전체를 나간다 } j++; //몇번 도는지 체크하는 변수 } }catch(IOException ie){} } | cs |
학생이름 명단을 메소드로 가져온 후 명단 line(줄)을 j로 지정한다.
while문으로 명단을 쭉 읽고
랜덤수 i와 명단line j가 일치하면 해당 라인의 이름을 출력한다.
break로 while 반복문 전체를 멈춘다(break 안하면 23번 도는거 무한반복)
3. 메인메소드에서 read 메소드 호출
1 2 3 | public static void main(String[] args) { new Lotto().read(); } | cs |
메인메소드에서 read메소드를 호출시켜준다
실행결과
java 파일 저장 후, cmd 돌린 결과(javac Lotto.java / java Lotto)
실행할때마다 결과가 다르게 나오는 것을 확인할 수 있다.
리스트에는 옹실1~옹실23까지 있었는데
0~22까지라 i의 값이 옹실이 뒤에 붙은 숫자 -1 로 적용됐다.
'Java' 카테고리의 다른 글
Java 타이머 : 멀티스레드를 이용한 10초 타이머 (0) | 2020.12.06 |
---|---|
Java 구구단 : 이중 for문을 이용한 구구단 (0) | 2020.11.23 |
Java 별찍기 : 이중 for문을 활용한 별(*) 찍기 (0) | 2020.11.19 |
Java 퀴즈 : 주어진 시간동안 문제 맞추는 O,X 퀴즈(멀티 쓰레드 활용) (0) | 2020.11.11 |
Java 멀티로또 : 명단파일, 숫자 입력받아서 숫자만큼 랜덤 뽑기 (0) | 2020.11.09 |