배열(array) :
하나의 변수에 여러 데이터를 넣을 수 있어 관리가 용이하고 가독성이 높아짐 , 변수를 줄여주고 연산에 편리하게 한다는 장점이있다.
public void testArray() {
//배열의 사용 이유
/*int num1 = 10;
int num2 = 20;
int num3 = 30;
int num4 = 40;
int num5 = 50;
int sum = 0;
sum += num1;
sum += num2;
sum += num3;
sum += num4;
sum += num5;
System.out.println("sum: " + sum);
*/
//이렇게 치는것 보다는 배열이 더 좋다 .
//배열 이용
int[] arr = new int[5];
/*arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
arr[3] = 40;
arr[4] = 50;
*/
//for 문 사용
for(int i= 0 ; i < 5 ; i++) {
arr[i] = (i+1)*10;
//int에 i 값을 넣음 i는 5가 될때까지 반복됨 (0 1 2 3 4) i는 계속증가함
}
int sum = 0;
/*
sum += arr[0];
sum += arr[1];
sum += arr[2];
sum += arr[3];
sum += arr[4];
*/
for(int i = 0; i < arr.length; i++) {
//i 는 arr.length < 배열의 크기만큼 증가시키겠다.
sum += arr[i];
}
System.out.println("sum: " + sum);
}
public void testArray2() {
//배열 선언
//자료형[] 변수명(배열명);
//자료형 변수명[];
/*int [] iarr;
char carr[]; //stack 영역에 배열의 주소를 보관할 수있는공간을 만듬
iarr = new int[5]; //방의 크기는 5 (index = 4)
carr = new char[10];
*/
//선언과동시에 할당
int iarr[] = new int [5];
char[] carr = new char[10];
System.out.println("iarr: " + iarr);
System.out.println("carr: " + carr);
System.out.println("iarr의 hachcode: " + iarr.hashCode());
System.out.println("carr의 hachcode: " + carr.hashCode());
System.out.println("iarr의 길이 : "+ iarr.length);
System.out.println("carr의 길이 : "+ carr.length);
//스캐너로 입력받은 정수값으로배열의 길이 지정하여 할당.
Scanner sc = new Scanner(System.in);
System.out.print("새로 할당할 배열의 길이를 입력하세요: ");
int size = sc.nextInt();
double darr[] = new double[size];
System.out.println("darr의 해시코드 : "+ darr.hashCode());
System.out.println("darr의 길이: " + darr.length);
//배열의 크기를 바꾸기
darr = new double[30];
System.out.println("darr의 해시코드 : "+ darr.hashCode());
System.out.println("darr의 길이: " + darr.length);
//한번 할당된 배열을 내가 직접 지울수 없다.
//더이상 참조하지않는 배열은 일정 시간이 지난 후 old영역으로 이동하여
//gc( 가비지 콜렉터 )가 삭제시킨다.
darr = null;
//NullPointerException
//아무것도 참조하지않고 null이라는 특수값을 가지고 있을때 발생하는 에러.
System.out.println("삭제 후에 darr의 길이 : " + darr.length);
}
public void testArray3() {
int[] iarr = new int[5];
// 출력 값은 0 -> 자동으로 0으로 초기화 되어있다.
for(int i = 0; i<iarr.length; i++) {
System.out.println("iarr[ " + i + " ] 의 값: " + iarr[i]);
}
//지정된 기본값 이외의 값으로 초기화
//{}
int iarr2[] = {11,22,33,44};
System.out.println(iarr2.length);
System.out.println(iarr2[2]);
String[] sarr = new String[] {"사과","고구마","감자","바나나","토마토"};
for(int i = 0; i<sarr.length; i++ ) {
System.out.println(sarr[i]);
}
}
}
-> 예제
더보기
배열의 얕은복사와 깊은복사
public class ArrayTest02 {
public String prn(int[] iarr) {
// 정수 배열받아 배열에 저장된값들을 string으로모아서 반환
String str = "";
for (int i = 0; i < iarr.length; i++) {
str += iarr[i] + " ";
}
return str;
}
public void shallowCopy() {
// 얕은 복사
int[] oArr = { 1, 3, 3, 4, 5 };
int[] cArr = oArr;
System.out.println("1. oArr : " + prn(oArr));
System.out.println("2. cArr : " + prn(cArr));
oArr[0] = 99;
System.out.println("1. oArr : " + prn(oArr));
System.out.println("2. cArr : " + prn(cArr));
System.out.println("1. oArr 의 해시코드 : " + oArr.hashCode());
System.out.println("2. cArr 의 해시코드 : " + cArr.hashCode());
// 얕은복사를 해서 해시코드 (주소)가 같은모습
}
public void deepCopy1() {
// 1. 동일한 배열을 새로 하나 생성하여 값을 복사.
int[] oArr = { 1, 2, 3, 4, 5 };
int[] cArr = new int[5];
// for문을 이용해서 값을 1:1로복사
for (int i = 0; i < oArr.length; i++) {
cArr[i] = oArr[i];
}
System.out.println("1. oArr : " + prn(oArr));
System.out.println("2. cArr : " + prn(cArr));
oArr[0] = 99;
System.out.println("1. oArr : " + prn(oArr));
System.out.println("2. cArr : " + prn(cArr));
//각각의 배열을가리키기 때문에 오리지날이 99로바꼈다한들카피는 달라지지않음
System.out.println("1. oArr 의 해시코드 : " + oArr.hashCode());
System.out.println("2. cArr 의 해시코드 : " + cArr.hashCode());
//해시코드도 서로 다른모습.
}
public void deepCopy() {
// 2. arraycopy()사용
int[] oArr = { 1, 2, 3, 4, 5 };
int[] cArr = new int[10];
// araycopy(src,srcPos,dest,destPos,length);
// src: 원본 배열 srcPos :복사 시작위치 dest : 카피배열 destPos : 붙여넣기 시작위치
// length : 복사할 길이
System.arraycopy(oArr, 0, cArr, 2, oArr.length);
System.out.println("oArr : " + prn(oArr));
System.out.println("cArr : " + prn(cArr));
// clone()
// 시작인덱스 등의 설정이 불가능 , 원본 배열을 통째로 복사해 새로운 배열을 할당
int[] cArr2 = new int[10];
System.out.println(cArr2.hashCode());
cArr2 =(int[]) oArr.clone();
System.out.println(cArr2.hashCode());
System.out.println("cArr2 : " + prn(cArr2));
}
}
얕은복사는 배열의 같은 주소값을 불러 복사하고 , 깊은복사는 새로운 주소값을 할당해 안의 데이터만 복사하여 새로운 배열을 생성한다.
public class ArraySample {
public void test1() {
/*- 구현 내용 :
1. 10개의 int 배열 선언하고 할당함
2. 각 방에 1~100사이의 임의의 난수를 기록함
Math.random() 사용함
new Random().nextInt(100) + 1;
3. 10개의 정수들의 합계를 구하여 출력함
*/
int iarr[] = new int [10];
int sum = 0;
for(int i = 0; i <iarr.length; i++) {
iarr[i] = (int)//int값으로 변환해줌(강제형변환)
(Math.random()*100) +1; // 0-0.99까지 만들어짐 * 100을해주면 99 그러니까 +1을 해줘서 100을만
sum += iarr[i];
}
System.out.println(sum);
}/*
[문제 2]
- ArraySample 클래스에 메소드 추가함
- 메소드명 : public void test2()
- 구현 내용 :
1. 10개의 int[] 선언, 할당함
2. 1~100사이의 임의의 정수를 발생시켜, 배열공간에 기록함
배열[인덱스] = (int)(Math.random() * 100) + 1;
3. 기록된 10개의 값중 가장 큰 값과 가장 작은 값을 알아내어
4. 출력확인
*/public void test2() {
int iarr[] = new int [10];
int min = 0;
int max = 0;
for(int i = 0; i <iarr.length; i++) {
iarr[i] = (int)//int값으로 변환해줌(강제형변환)
(Math.random()*100) +1; // 0-0.99까지 만들어짐 * 100을해주면 99 그러니까 +1을 해줘서 100을만듬
System.out.println(iarr[i]);
if (max <iarr[i]) {
max = iarr[i];//max의 값보다 iarr[i]의 값이 크면 max 의 값은 iarr[i]
}
min = iarr[i];
if( min > iarr[i]) {
min = iarr[i];//min의 값보다 iarr[i]의 값이 작으면 min 의 값은 iarr[i]
}
}System.out.println( "제일 큰 수: " + max + " 가장 작은 수 : " + min );
}
}
-> 실습
2차원배열 :
배열의 요소로 1차원 배열을 가지는 배열 ,
타입 배열이름[행의길이][열의길이]; 로 선언
public class DimensionalArrayTest01 {
public void test1() {
// 2차원 배열의 선언
// 선언을 하게 되면 stack에 래퍼런스 변수가 생성
int[][] iarr1;
int iarr2[][];
// heap 영역에 배열 할당.
iarr1 = new int[3][5]; // 세줄에 다섯칸짜리 배열이 만들어짐
iarr2 = new int[3][]; // 세줄만 만들어진 상태
iarr2[0] = new int[3];
iarr2[1] = new int[2]; // 가변 배열
iarr2[2] = new int[5];
int val =1;
for (int i = 0 ; i<iarr1.length; i ++) {
for( int j=0; j<iarr1[i].length; j++) {
iarr1[i][j] = val ++;
}
}
for ( int i = 0; i<iarr1.length; i++) {
for (int j= 0; j<iarr1[i].length; j++) {
System.out.print(iarr1[i][j]+" ");
}
System.out.println();
}
}
}
-> 2차원배열 예제
-> 설명을 돕는 그림 2행 3열의 배열이 만들어진다. / 0 , 0 / 0 , 1 / 0 , 2 / / 1 , 0 / 1 , 1 / 1 , 2 /
🐵🐵
'JAVA' 카테고리의 다른 글
[JAVA]객체#2 (0) | 2024.02.20 |
---|---|
[JAVA]객체지향 프로그래밍 (0) | 2024.02.19 |
[JAVA]조건문 (1) | 2024.02.13 |
[JAVA]제어문 (0) | 2024.02.08 |
[JAVA] 연산자 (0) | 2024.02.04 |