이클립스를 사용하여 랜덤함수를 사용하고, 추가로 랜덤을 중복없이 코딩하는 방법에 대해 포스팅 되었다.
1. 랜덤
1) 랜덤함수란
: 말 그대로 랜덤 함수를 이용하는 것으로, 0~설정한 숫자만큼의 값 중 하나를 랜덤으로 출력해주는 함수이다.
2) 함수 초기화와 사용
메인에 "Random r = new Random();"를 선언하는 것이 바로 랜덤함수의 초기화지만, Sccaner함수처럼 클래스 외부에 Import java.util.Random;와 같이 임폴트를 앞에 붙이고 자바의 유틸이라는 서랍에서 랜덤함수를 꺼내 쓰겠다는 선언이 필수이다. 그러나 Sccaner와 다르게 Random함수는 import가 자동생성되지 않는다.
* 단축키 [Ctrl + Shift + O]를 통해 import를 빠르게 생성할 수 있다 *
package dd;
import java.util.Random; // 단축키로 빠르게 생성
public class Test01 {
public static void main(String[] args) {
Random r = new Random(); //초기화
// int i = 10; 과 유사한 형태
r.nextInt(10); // 0<= r <10
}
}
r이라는 객체로 랜덤값을 담겠다는 말과 유사하고, 초기화가 목적이다.
사용하기 위해서는 설정한 객체명.nextInt();을 선언한다. 이때 괄호 안에는 랜덤수의 범위를 입력하게 되는데, 안에 삽입된 값은 0을 포함한 값부터 입력된 값-1이라고 할 수 있다. 즉 위와같이 10을 넣게 되면 0~9까지의 수가 출력된다.
만약 1~10의 숫자를 랜덤으로 지정하고 싶다면 r.nextInt(10)+1; 와 같이 선언할 수 있다.
2. boolean flag을 이용한 중복 제거
1) boolean flag
: boolean flag는 변수이고, 결과는 T/F 뿐이다. 이를 반복문과 같이 사용하면
"~의 경우에는 출력을 하고, ~의 경우에는 출력하지 않는다."와 유사한 개념을 코딩할 수 있다.
즉, 무언가를 할지말지 결정해야 하는 순간 모두를 포괄하여 사용할 수 있는 개념이다.
2) Random에서의 flag
: 위의 설명에 빗대자면 "중복값이 없으면 종료하고, 있으면 종료하지 않는다."와 같은 의미를 갖는다고 할 수 있다.
[MAIN]
Random rand=new Random();
int i=0;
while(i<data.length) {
data[i]=rand.nextInt(90)+10;
boolean flag=false;
for(int j=0;j<i;j++) {
if(data[j]==data[i]) {
flag=true;
break;
}
}
if(flag) {
continue;
}
i++;
}
위 코드를 풀이하면 랜덤수가 중복이지 않을때까지 반복한다는 것은 총 몇 회를 반복할 것인지 정확히 알 수 없기때문에 for이 아닌, while을 사용. 그러나 배열에 랜덤값을 넣는 행위가 배열의 길이만큼 반복됨을 알기때문에 무한루트를 사용하지 않는다. int i = 0;임을 반복문 밖에서 선언함으로 i라는 변수가 0부터 시작될 수 있도록 한다.
data[index]에는 10~99까지의 랜덤수가 담기게 된다.
for문을 사용해 data[index]의 값과 data[index이전의 값들]을 비교하여 같은 값이 있는지를 확인 할 수 있도록 한다.
for문 외부에서 flag를 사용. 보통의 경우 flag는 false이지만, 중복이 없게되면 (flag=true)랜덤값을 다시 뽑지 않는다.
그럼 for문을 탈출하고 i++을 만나 i는 1씩 증가하게 된다. 만약 중복값이 있다면 flag=false이므로 continue를 만나 while의 처음으로 돌아가게 된다. 이렇게 배열의 0번 인덱스부터 마지막 인덱스까지 비교하게 되면 랜덤수는 중복이 없게 완성된다.
'JAVA' 카테고리의 다른 글
[메소드] 함수 & 재귀호출 (0) | 2021.12.27 |
---|---|
[알고리즘] 선택정렬 (0) | 2021.12.26 |
[제어문] 과제_up, down game (0) | 2021.12.23 |
[제어문] 반복문 (0) | 2021.12.22 |
[제어문] 연산자 & 조건문 & 입력함수 (0) | 2021.12.21 |