[Java] Array - 중복 제거된 난수 생성하기 feat.로또번호
2024. 10. 4. 01:24ㆍJava
오늘은 중복 없이 배열에 값을 넣기 위한 방법을 알아볼거다.
배열생성, 정렬, 출력 3가지 기능에 따라 메서드를 생성해보자.
Step1 배열 생성하기
import java.util.Random;
public class Test01 {
static int[] getRandomInt() { // getRandomInt() : 한줄씩 랜덤정수를 뽑는다
Random ran = new Random();
int[] arr = new int[6];
int count = 0;
while(count < 6) { // 총 6개의 중복없는 랜덤 정수 뽑기
arr[count] = ran.nextInt(45) + 1;
count += 1;
for(int i = 0; i < arr.length; i++) {
for(int j = i+1; j < count; j++) {
if(arr[i] == arr[j]) { // 중복이 있다면
count--; // 다시 뽑아주어야하니까 count - 1
}
}
}
}
return arr; // 배열 자체를 반환
}
Step2 선택정렬
static int[] functions(int[] arr) { // 한줄을 선택정렬하는
for(int i = 0; i < arr.length; i++) {
for(int j = i + 1; j < arr.length; j++) {
int tmp = 0;
if(arr[i] > arr[j]) { // 앞의 값이 더 크면
tmp = arr[i]; // 값의 변화없이 자리 바꾸기 (오름차순)
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
return arr; // 배열을 반환
}
Step3 출력
값마다 콤마로 구분해주고,
마지막으로 출력되는 값은 다음 값이 없으므로 콤마 없이 출력한다.
static int[] printIntArr(int[] arr) {
for(int i = 0; i < 6; i++) {
if(i < 5) {
System.out.printf("%2d, ", arr[i]);
}
if(i == 5) { // 마지막 값은 콤마 없이 출력
System.out.printf("%2d ", arr[i]);
}
}
System.out.println();
return arr;
}
Step4 구현
main 함수를 통해 메서드를 호출하여 결과를 반환해준다.
public static void main(String[] args) {
int[] arr = null; // 빈 배열
for(int i = 0; i < 5; i++) { // 로또 5줄을 산다는 가정하에 5번 반복.
arr = getRandomInt(); // 중복없이 배열 생성하여 빈 배열에 대입
functions(arr); // 선택정렬
printIntArr(arr); // 출력
}
}
처음에는 여러 기능을 메서드로 분리해서 처리하는 과정이 꽤 어려웠는데, 메서드의 역할을 하나씩 생각하면서 작성해보니까 조금 더 수월하게 풀렸다.
메서드를 작성할 때 기억해야 할 몇 가지 중요한 점
- 메서드가 어떤 결과를 반환해야 할지 먼저 생각해보기.
- 메서드가 반환하는 결과물의 자료형과 그 메서드를 호출해서 받을 변수의 자료형이 일치하도록 작성하기.
- main 메서드에는 최대한 코드 작성을 줄이기. -> 내용이 아예 없어야 한다는 건 아니고, 메서드를 호출해서 결과를 출력하는 부분만 간단히 담당
무엇을 구현하고 싶은지 먼저 확실히 생각해보고, 그걸 구현하기 위해 필요한 기능들이 무엇인지 차근차근 고민해보자.
'Java' 카테고리의 다른 글
[Java] 자바의 반복문 - for, while (1) | 2024.10.04 |
---|---|
[Java] 자바의 조건문 if ~ else, switch case (0) | 2024.10.04 |
[Java] collection(List, Set, Map) (1) | 2024.10.04 |
[Java] 페이징(paging) 처리 알고리즘 (1) | 2024.10.04 |
[Java] 변수의 종류 (0) | 2024.10.03 |