옹실이의 개발이야기

Java

Java 로또 : 랜덤으로 1개 뽑기

옹실 2020. 11. 8. 18:31

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 로 적용됐다.