today_is

[ array ] 중복 제거한 난수 생성하기 (로또번호 추첨) 본문

java

[ array ] 중복 제거한 난수 생성하기 (로또번호 추첨)

ye_rang 2023. 11. 16. 20:28

오늘의 목표 >>

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

뿐만아니라, 앞서 다른 부분을 공부하면서 기능에 따라 코드 영역을 구분하는 것이 중요하다는 것을 느꼈다. 

이번에는 기능에 따라 메서드를 구현하여 코드를 작성해볼 것이다.

 

배열생성, 정렬, 출력   3가지 기능에 따라 메서드를 생성해보겠다.

 


 

step 1 >   배열생성하기

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;		//	배열 자체를 반환
	}

 

 

step 2 >  선택정렬

 

	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;		//	배열을 반환
	}

 

 

step 3 >  출력

 

값마다 콤마로 구분해주고,

마지막으로 출력되는 값은 다음값이 없으므로 콤마 없이 출력

 

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;
}

 

 

step 4 > 구현 

 

 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);		//	출력
	}
}

 

 


 

 

study_review >> 

처음에는 여러 기능을 분리하여 메서드로 처리하는 과정이 어렵게 느껴졌다.

그러나, 메서드의 역할을 생각하면서 작성했더니 조금은 수월하게 풀렸다.

 

메서드를 작성할때 유의점 !!

1 ) 메서드가 반환해야할 결과물이 무엇인지 생각해본다

 

2 ) 메서드가 반환할 결과물의 자료형과

     메서드를 호출하여 결과를 받을 변수의 자료형이 일치하게 작성해야한다

 

3 ) main 에는 최대한 코드 작성을 줄인다

-> 내용이 없어야한다기보다는 메인에는 메서드를 호출하여 결과물을 받아 결과를 출력할 부분만 담당

 

무엇을 구현하고 싶은지, 그것을 구현하기 위해서는 어떤 기능들이 필요한지 항상 먼저 생각해보자 !

'java' 카테고리의 다른 글

[ loop ] for, while 반복문  (0) 2023.11.20
[ control ] if ~ else , switch case  (0) 2023.11.17
[ collection ]  (0) 2023.11.16
[ java ] 페이징(paging) 알고리즘  (0) 2023.11.07
[ java ] 객체지향 언어, java  (0) 2023.11.03