~ 배열 실습~
public void minMax() {//실습1
// 10개의 값을 저장할 수 있는 정수형 배열을 선언 및 할당하고
// 1 ~ 10 사이의 난수(랜덤값)를 발생시켜 배열에 초기화한 후
// 배열 전체 값과 그 값 중에서 최대값과 최소값을 출력하세요
int[] iArr = new int[10]; // 1. 10개 값을 저장할 수 있는 정수형 배열
for(int i = 0; i < iArr.length; i++) {
iArr[i] = (int)(Math.random()*10) + 1;
System.out.println(iArr[i]);
}
int min = iArr[0];
int max = iArr[0];
for(int i = 0; i < iArr.length; i++) {
if(min > iArr[i]) {
min = iArr[i];
}else if(max < iArr[i]) {
max = iArr[i];
}
}
System.out.println("\n최소값 : " + min);
System.out.println("최대값 : " + max);
}//실습1끝
public void lotto() { // 실습2 로또 시작
// 중복값 없이 로또 번호를 출력하세요
// ex.
// 10 31 2 5 8 28
int[] lotto = new int[6];
for(int i = 0; i < lotto.length; i++) { //for 시작
lotto[i] = (int)(Math.random() * 45 + 1);
if(i > 0) { //if 시작
for(int j = 0; j < i; j++) {
if(lotto[j] == lotto[i]){
System.out.println(lotto[i] + "중복값발생!");
i--;
break;
}
}
} // if 끝
System.out.print(lotto[i] + " ");
}// for 끝
Arrays.sort(lotto); // 오름차순 정렬
System.out.println(Arrays.toString(lotto));
}// 로또 끝
중복값 구하는 법 익히기!!!! 랜덤값 >> lotto[i] = (int)(Math.random() * 45 + 1); 오름차순 정렬 >> Arrays.sort(lotto); |
// 배열 선언 및 할당과 동시에 초기화(대입)까지 한 번에 끝내는 방법 // 권장하는 방법은 아님 * arr[0] = 1; * arr[1] = 3; * arr[2] = 8; * arr[3] = 5; 초기화 안하면 int형 배열은 0, double형 배열은 0.0 // 방법1. int[] arr1 = new int[] {1, 3, 8, 5}; // 방법2. int[] arr2 = {1, 3, 8, 5}; String[] students = {"백노바", "강초당", "장폰주", "망난이", "송몽숙", "구라베"}; //하드코딩 |
❗배열 복사 |
* 1. 얕은 복사 : 배열의 주소값만을 복사한다 int[] origin = {1, 2, 3, 4, 5}; int[] copy = origin; System.out.println(origin.hashCode() + " \n" + copy.hashCode()); // 해시코드를 비교하면 원본과 복사본이 같은 해시코드를 가진 것을 확인할 수 있다 // 해시코드가 동일하다고 두 배열이 완전히 같다고 100% 장담할 수 없지만, 해시코드가 다르면 두 개는 완전히 다른 배열임 // 얕은복사 => 배열의 주소값이 복사되어 원본과 복사본이 같다! * 2. 깊은 복사 : 동일한 새로운 배열을 하나 생성해서 실제 내부값까지 복사한다, 주소값 다름 ** 방법1) int[ ] origin = {1, 2, 3, 4, 5}; int[ ] copy = new int[origin.length]; // 1단계 : 기존과 동일한 크기의 새 배열을 생성 및 할당 for(int i = 0; i < copy.length; i++) { // 2단계 : 반복문을 사용하여 값 대입 copy[i] = origin[i]; // 실제 우리가 원하는 배열 내부의 값들이 복사된 것을 확인할 수 있다 // 주소값 복사XXX ** 방법2) arrayclopy( ) 메소드 이용 1단계 : 새로운 배열을 생성한 후 2단계 : System 클래스에서의 arraycopy() 호출 몇 번 인덱스부터 몇 개를 어느 위치부터 넣을 것인지 직접 지정 가능하다!! >> 괄호 안에 작성 * System.arraycopy(src, srcPos, dest, destPos, length); * System.arraycopy(원본배열이름, 원본배열에서 복사를 시작할 인덱스 번호, 복사본 배열 이름, 복사본 배열에서 복사가 시작될 인덱스, 복사할 갯수); int[ ] origin = {1, 2, 3, 4, 5}; int[ ] copy = new int[10]; System.arraycopy(origin, 0, copy, 0, 5); // 1 2 3 4 5 0 0 0 0 0 System.arraycopy(origin, 0, copy, 3, 5); // 1 2 3 1 2 3 4 5 0 0 System.arraycopy(origin, 2, copy, 9, 2); //ArrayIndexOutOfBounds 10번방 없어!! >> 배열 범위 초과 for(int i = 0; i < copy.length; i++) { System.out.print(copy[i] + " "); } //배열 출력 ** 방법3 copyOf() 사용 Arrays클래스에서 제공하는 copyOf() [표현법] 복사본 배열 = Arrays.copyOf(원본배열이름, 복사할 갯수); int[ ] origin = {1, 2, 3, 4, 5}; int[ ] copy = Arrays.copyOf(origin, 10); // 원본 배열보다 큰 값을 제시하면 복사본 배열에 공간 생성 for(int i = 0; i < copy.length; i++) { System.out.print(copy[i] + " "); } // 배열 출력 1 2 3 4 5 0 0 0 0 0 /* * System.arraycopy( ) * : 몇 번 인덱스부터 몇 개를 어느 위치의 인덱스에 복사할 것인지 모두 지정 가능 * * Arrays.copyOf( ) * : 무조건 원본배열의 0번 인덱스부터 복사가 진행(내가 지정한 갯수 만큼) * */ ** 방법 4 clone( ); [표현법] 복사본배열이름 = 원본배열이름.clone(); int[ ] origin = {1, 2, 3, 4, 5}; int[ ] copy = origin.clone( ); // 1 2 3 4 5 // 인덱스를 직접 지정x, 복사할 갯수 지정x => 원본 배열과 완전히 똑같다. |
'국비 > Java' 카테고리의 다른 글
[08] Java 객체 - 캡슐화(encapsulation), 필드(field), 메소드(method) (0) | 2022.04.18 |
---|---|
[07-2] Java - 객체(Object) (0) | 2022.04.15 |
[06-2] Java - 배열(Array) (0) | 2022.04.14 |
[06-1] Java - 탈출문 (break, continue) (0) | 2022.04.14 |
[05-2] 과제 (0) | 2022.04.13 |