[til 007_002] 배열

김동현·2023년 7월 20일
0

til

목록 보기
15/53

오늘한것 2.

public class ArrayExample2 {
	// 배열 복사 for, arraycopy, copyOf
	// 1. for문을 이용하여 데이터 하나씩 직접 복사하기
	// 2. System클래스에 arraycopu() 메소드 이용하기
	// 3. Arrays 클래스에 copOf() 메소드 이용하기
public void shallowCopy() {
	
	// 얕은 복사 (shallow)
	// -> 주소를 복사하여 서로 다른 두 변수가
	// 하나의 배열(또는 객체)을 참조하는 상태를 만드는 복사 방법
	
	int[] arr = {1, 2, 3, 4, 5};
	
	// 얕은 복사 진행
	int[] copyArr = arr;
	
	System.out.println("변경 전");
	System.out.println("arr : " + Arrays.toString(arr));
	System.out.println("copyArr : " + Arrays.toString(copyArr));
	
	// 얕은 복사한 배열의 값을 변경해보자
	
	copyArr[2] = 999;
	
	System.out.println("변경 후");
	System.out.println("arr : " + Arrays.toString(arr));
	System.out.println("copyArr : " + Arrays.toString(copyArr));
	
	
	

	
}

public void deepCopy() {

// 깊은 복사 (deep)
// -> 같은 자료형의 새로운 배열을 만들어서
// 기존 배열의 데이터를 모두 복사하는 방법
	
	int[] arr = {1,2,3,4,5}; // 원본
	
	// 1. for문을 이용한 깊은 복사
	int[] copyArr1 = new int[arr.length]; // 5칸 짜리 배열 생성;
	
	for(int i = 0; i< arr.length; i++) {
		copyArr1 [i]= arr[i];

	}
	
	// 2. System.arraycopy(원본배열, 원본 복사 시작 인덱스,
	//					복사배열, 복사배열의 삽입 시작 인덱스, 복사길이);
	
	int [] copyArr2 = new int[arr.length];
	System.arraycopy(arr, 0, copyArr2, 0, arr.length);
	
	
	// 3. 복사할 배열 참조 변수 = Arrays.copyOf(원본배열, 복사할길이);
	
	int[] copyArr3 = Arrays.copyOf(arr, arr.length);
	
	// 값 변경 후 확인
	
	copyArr1[4] = 0;
	copyArr2[4]= 999;
	copyArr3[4]= 5000;
	
	
	
	System.out.println("arr : " + Arrays.toString(arr));
	System.out.println("copyArr1 : " + Arrays.toString(copyArr1));
	System.out.println("copyArr2 : " + Arrays.toString(copyArr2));
	System.out.println("copyArr3 : " + Arrays.toString(copyArr3));
}
// 배열을 이용한 중복 데이터 제거 + 정렬
public void createLottoNumber() {
	
	// 1. 1 ~ 45 사이 중복되지 않은 난수 6개 생성
	
	// 2. 생선된 난수가 오름차순으로 정렬
	
	// 1) 정수 6개를 저장할 배열 선언 및 할당
	int[] lotto = new int[6];

	// 2) 생선된 배열을 처음부터 끝까지 순차 접근하는 for문 작성
	for (int i = 0; i < lotto.length; i++) {
		
		// 3) 1~45 사이 난수 생성
		int random = (int)(Math.random() * 45 + 1);
		// 0.0 <= x <1.0
		// 1 <= (int)(x*45+1) < 46
		// 1~ 45
		
		// 4) 생선된 난수를 순서대로 배열 요소에 대입
		lotto[i] = random;
		
		// 5) 중복 검사를 위한 for 문 작성
		for(int x = 0; x < i; x++) {
			
			// 6) 현재 생성된 난수와 같은 수가
			// 앞쪽 요소에 있는지 검사
			if(random == lotto[x]) {
				i--;
				// i 가 1씩 증가할때마다 난수가 하나 생성된다.
				// -> 중복 값이 있으므로 난수를 새로 하나 더 생성해야된다.
				// -->i는 기본적으로 0~5까지 6회 반복되지만
				// i 값을 인위적으로 1 감소시켜서 총 7회 반복되는 모양을 만든것.
				
				break;
				// 앞쪽에서 중복 데이터를 발견하면
				// 남은 값을 비교할 필요 없다.
				// -> 효율 향상을 위해서 검사하는 for문을 종료
				
			}
		}
		
		
		
	}
	
	// 7) 오름차순 정렬
	// -> 선택, 삽입, 버블, 퀵 등등
	// --> 자바가 정렬 방법을 미리 만들어서 제공하고 있음
	// Arrays.sort(배열명) : 배열 내 값들이 오름차순으로 정렬됨
	
	Arrays.sort(lotto);
	
	System.out.println( Arrays.toString(lotto));
	
	
	
	
}

}

1개의 댓글

comment-user-thumbnail
2023년 7월 20일

좋은 글 잘 읽었습니다, 감사합니다.

답글 달기

관련 채용 정보