[Java] Array - 중복 제거된 난수 생성하기 feat.로또번호

2024. 10. 4. 01:24Java

오늘은 중복 없이 배열에 값을 넣기 위한 방법을 알아볼거다.

 

배열생성, 정렬, 출력 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);		//	출력
	}
}

 


처음에는 여러 기능을 메서드로 분리해서 처리하는 과정이 꽤 어려웠는데, 메서드의 역할을 하나씩 생각하면서 작성해보니까 조금 더 수월하게 풀렸다.

 

메서드를 작성할 때 기억해야 할 몇 가지 중요한 점

  1. 메서드가 어떤 결과를 반환해야 할지 먼저 생각해보기.
  2. 메서드가 반환하는 결과물의 자료형과 그 메서드를 호출해서 받을 변수의 자료형이 일치하도록 작성하기.
  3. main 메서드에는 최대한 코드 작성을 줄이기. -> 내용이 아예 없어야 한다는 건 아니고, 메서드를 호출해서 결과를 출력하는 부분만 간단히 담당

무엇을 구현하고 싶은지 먼저 확실히 생각해보고, 그걸 구현하기 위해 필요한 기능들이 무엇인지 차근차근 고민해보자.