10월 19일 Day07

여우·2022년 10월 19일
0

공부중

목록 보기
1/38
post-thumbnail

1. 길이가 자동으로 늘어나는 배열 :

Reference Type의 이해가 바탕이 됨. 자바에서 primitive를 제외한 모든 유형의 데이터는 참조변수를 활용한다. 참조변수는 그 자체가 본체가 아니라, 참조하는 대상을 바꿀 수 있다.

예시)

  • arr의 배열의값이 초기화 되지 않아 모두 0으로 되어있다.
  • 조건문을 활용하여 배열의 자리 마다 확인하여 값이 0 이면 스캐너로 입력된 값을 차례로 대입한다.
  • 배열의 마지막 자리 마저 채워 지면 새로운 tmp[] 배열을 이전 배열의 크기만큼을 더한 길이로 생성한다.
  • 그전에 채워져 있던 내용들을 tmp에 삽입 한다.
  • 마지막으로 이제 arr은 기존 arr 배열을 더 이상 바라 보지 않고 tmp가 만들어놓은 배열을 바라보게 하면. arr의 배열의 길이가 늘어난게 아니라 arr이 바라보는 대상이 바뀌게 된다. tmp는 이제 다시 아무한테도 참조 되지 않기에 가비지 콜렉터에 의해 수거 되어 진다.

2. null 개념 이해

s1 과 s2 둘다 비어있어 같아 보이지만, s1은 참조하는 대상 자체가 없는것이고, s2는 참조하는 대상이 있지만 내용이 없다.

String 의 내용이 같은지 판별하는 .equals() 같은 경우 .왼쪽에는 null이 위치 하게 되면 null point Exception이 발생하게 된다. 그러므로 비교시에는 무조건 .왼쪽의 null이 위치 하지 않도록 주의 해야 한다.

3. 이중 배열

이중 배열 생성은 [][]를 두번 사용하여 만든다.
예시)
arr = new int[5][5]; // 모든값은 0으로 초기화 된 5행 5열의 이중 배열을 생성한다.

	int[] arr1 = {  1,  2,  3,  4,  5 };
	int[] arr2 = {  6,  7,  8,  9, 10 };
	int[] arr3 = { 11, 12, 13, 14, 15 };
	int[] arr4 = { 16, 17, 18, 19, 20 };
	int[] arr5 = { 21, 22, 23, 24, 25 };
	
	int[][] arr = { arr1, arr2, arr3, arr4, arr5 };
    
    arr[0][0] = 1  
    arr[1][2] = 8 
   

배열 이므로 인덱싱을 이용해서 배열안의 값을 저장하거나 불러 오기도 가능하다.

배열의 인덱스들의 번호를 묶어서 규치적인 모양으로 출력 하는 것도 가능하다.

예시)
int[][] arr = new int[5][5];

int num = 0;
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[i].length; j++) {
arr[i][j] = ++num;
}
}

배열의 요소들을 차례로 출력시

1   2  3  4  5 
6   7  8  9 10 
11 12 13 14 15 
16 17 18 19 20 
21 22 23 24 25 

모양으로 출력이 된다.

같은 방식으로
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[i].length; j++) {
arr[i][j] = i * 5 + j + 1;
}
}
num 이라는 변수를 사용하지 않고, 인덱스 번호를 사용하여 규칙적인 증가 값을 구 할 수 있다.

지그재그 방식으로 출력하기

for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[i].length; j++) {
int tmp = i % 2 == 0 ? j + 1 : 5 - j;
arr[i][j] = i * 5 + tmp;
}
}

1   2  3  4  5 
10  9  8  7  6 
11 12 13 14 15 
20 19 18 17 16 
21 22 23 24 25    모양으로 출력이 된다.

세로로 지그 재그 모양으로 출력하는 코드

for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[i].length; j++) {
int tmp = i % 2 == 0 ? j + 1 : 5 - j;
arr[j][i] = i * 5 + tmp;
}
}

1 10 11 20 21
2 9 12 19 22
3 8 13 18 23
4 7 14 17 24
5 6 15 16 25

위에서 아래로 또 아래에서 위로 움직이는 듯한 모습으로 출력이 된다.

profile
우당탕탕 지금은 개발중

0개의 댓글