public class Lotto {
    public static void main(String[] args) {
        int[] lotto = new int[6];
        for (int i = 0; i < lotto.length; i++) {
            int ranNum = -1;
            boolean isDuplicate;
            do {
                isDuplicate = false;
                ranNum = (int) (Math.random() * 45 + 1);
                for (int j = 0; j < i; j++) {
                    if (ranNum == lotto[j]) {
                        isDuplicate = true;
                        break;
                    }
                }
            } while (isDuplicate);
            lotto[i] = ranNum;
        }
        for (int n : lotto) {
            System.out.print(n + "\t");
        }
    }
}


자바 기초공부 하면서 작성해본 로또 번호 생성 메서드입니다. 이제 갓 배우기 시작한 초보이니 고수님들 코드 보시고 지적할 부분 있다면 지적해주세요.



제가 위 구문에서 배열에 번호를 넣은 이유는 나중에 사용자 입력 번호를 받아서 배열과 비교해 당첨 여부를 확인해주기 위함이었는데, starbros님께서 댓글로 적어주신 코드가 중복 검사에서 더 효율적으로 보이길래 starbros님의 방법을 활용하면서 당첨 번호를 배열에 따로 넣도록 코드를 새로 작성해봤습니다. 중복 여부 검사는 int형 배열이 0으로 초기화 된다는 점을 활용하니 확실히 편하네요.

public class Lotto {
    public static void main(String[] args) {
        int count = 0;
        int[] numbers = new int[45];
        int[] lotto = new int[6];
        while (count < lotto.length) {
            int ranNum = (int) (Math.random() * 45);
            if (numbers[ranNum] == 0) {
                numbers[ranNum] = 1;
                lotto[count] = ranNum + 1;
                count++;
            }
        }
        for (int n : lotto) {
            System.out.print(n + "\t");
        }
    }
}