자바 초보분들이 많이 하시는 프로젝트인 숫자 맞추기, 야구게임, 로또 프로그램 등을 완성시키기 위해서 중복 숫자 값이 나오지 않도록 구현을 하실 텐데, 중복 숫자를 제거하기 위해 한 가지 쉬운 방법을 알려드리겠습니다.
public class RandomNum {
public static void main(String[] args) {
int rNum[] = new int[9];
boolean room[] = new boolean[9];
int index = 0;
int rnd;
while(index < 9){
rnd = (int)(Math.random()*9);
if(!room[rnd]){
room[rnd] = true;
rNum[index] = rnd + 1;
index++;
}
}
for(int i=0; i<rNum.length; i++){
System.out.print(rNum[i]+"\t");
if((i+1)%3 == 0){
System.out.println();
}
}
}
}
/* result
5 8 4
1 3 2
6 7 9
*/
위 코드는 [1~45의 숫자] 중 중복 없이 30개의 숫자를 뽑아서 출력하는 프로그램입니다.
즉, 중복 숫자가 나오지 않는 로또 프로그램을 5회 연속 실행하는 프로그램이라고 생각하시면 될 것 같습니다.
rNum = 필요한 숫자의 개수
room = 숫자의 범위
예를 들어서, 야구게임이라고 가정했을 때는 int rNum [] = new int [3], boolean room [] = new boolean[9] 로 해주시면 되겠죠?
boolean room[] = new boolean [9]의 경우 선언을 하고, boolean 초기화를 안 해주는 경우 기본적으로 false값이 들어가게 됩니다.
room[0] | room[1] | room[2] | room[3] | room[4] | room[5] | room[6] | room[7] | room[8] | room[9] |
false | false | false | false | false | false | false | false | false | false |
만약, room = 방 이름 [0] = 객실번호라고 합시다!
현재는 모든 문이 false(=close) 닫혀있으므로, 손님이 들어가지 않은 상태입니다.
당연히 손님이 없는 빈 객실에만 손님이 들어갈 수 있겠죠? 조건문을 사용합니다.
if(! room [rnd])
첫 번째 손님은 5번 손님이네요. room [5]은 5번 손님이 들어갈수 있도록 방문을 열어줍니다.
room[5] = true
room[0] | room[1] | room[2] | room[3] | room[4] | room[5] | room[6] | room[7] | room[8] | room[9] |
false | false | false | false | false | true | false | false | false | false |
이런 식으로 필요한 숫자의 개수만큼 boolean형 배열을 만들어서 숫자를 뽑아내서 true로 변경하여 중복 숫자가 나오지 않도록 순서대로 rNum에 값을 넣어주면 됩니다.
정리
1. 필요한 숫자의 개수(rNum)만큼 boolean형 배열 선언
2. 랜덤 숫자(rnd)를 뽑고 boolean [rnd] = false 일 때만
3. 랜덤 숫자(rnd)의 값을 필요한 숫자의 배열(rNum)에 순차적으로 넣어준다.
'프로그래밍 언어 > Java' 카테고리의 다른 글
[JAVA] Calendar class 사용해서 날짜 가져오기 (0) | 2021.05.13 |
---|---|
[JAVA] String class 자주사용하는 메서드 (0) | 2021.05.13 |
[JAVA] 변수정리 #멤버변수? 지역변수? 기본형? 참조형? (0) | 2021.04.22 |
[JAVA] #OOP특성 #상속 #다형 #은닉 #캡슐화 #캐스팅 #오버라이딩 (0) | 2021.04.20 |
[JAVA] #클래스구조 #멤버변수 #생성자 #메소드 #오버로딩 (0) | 2021.04.14 |