2차원 배열

김지원·2022년 5월 25일
0

Java

목록 보기
15/38

2차원 배열

선언 방식

자료형 [][] 배열명 = new 자료형[행][열];
자료형 [][] 배열명 = {
		{값1,값2....},
        {값3,값4....}
};

월세구하던 예제를 떠올려보자.
각 동(1~3동)에 3호씩 있다고 상상하며 접근해보자.

2차원 배열은 행,열을 알아야 이해하기 쉽다.

  • 1차원 배열로 2차원 배열을 나타냈을 때 index 번호를 알아내려면
    계차수열,등비수열,등차수열을 사용해야되서 (우리가 직접 나눠줘야함.)
    2차원배열을 사용한다.

  • 3, 4차원은 메모리낭비가 너무 심해서 2차원 배열을 거의 주로 사용한다.
    2차원 배열의 변수명은 주로 arr을 붙인다. ( 배열은 ar )

각 행마다 열이 같을 때 : 정방배열
각 행마다 열이 다를 때 : 비정방배열

위 그림은 이해하기 편하게 논리적으로 그린거고
사실상 내부적으로 RAM에서는 물리적으로 그려진다.
(마치 1차원처럼 이어져서 그려진다, 밑에 그림 참고하여 이해)

2차원배열 4 5 -> 4행 5열
3차원배열 3 4 5 -> 3면 4행 5열
4차원배열 2 3 4 5 -> 2의 3면 4행 5열


<2차원 배열>

배열은 저장공간이 나열되어있고 저장공간마다 고유한 주소값을 가지고 있다.

3행3열로 접근해보자.
3행3열 => 9개의 주소값이 생긴다.
arrData라는 배열의 저장공간이 있다고 가정하자.

arrData 저장공간 안에 시작주소 100번지가 담김. -> stack메모리 영역
new -> heap메모리 영역

1차원배열을 참조해봤을때는 이 있었다.
arrData 0번째에 참조해보자.
2차원배열에 한번 들어갔더니 배열이 있다.
두번 접근을 해야 이 나온다.

즉! 2차원 배열은
배열 안에 배열이 있다.

< if >
9에 접근하고 싶다면

arrData +0 +2
-> 왜냐면 배열안에 배열이 있으니 두번 접근해야 값이 나온다!

참고)
arrData[0] = arData
위 배열의 시작주소(3개)를 가지게 된다.


< example 1 >

arrData[0][2] //0행 2열
-> 7 

< example 2 >

int [][] arrData = new int[3][4];
		
//3*4 = 12번 실행
for(int i = 0; i<12; i++) {
		~~~~~	
}

+) for문 한번으로 구구단 1~9단 출력해보기.(이중for문의 소중함을 깨닫자...)

나머지랑 나누기를 통해서 가능하다.

for(int i =1; i<90; i++) {
	if(i% 10 == 0) { //단수*0이 생기는 걸 방지
		i++; //1씩더해줌
		System.out.println();//여기들어왔다는건 단이 끝났다는 의미임으로 줄바꿈해주자.(가독성)
	}
System.out.printf("%d*%d=%d\n",(i/10)+1, i%10, ((i/10)+1)*(i%10));

< 풀이 >

i=1 이면 1/10의 몫은 0 
i가 10이되면 몫1이다. 
i가 10이되기전까지 0은 9번출력이 된다.
9번반복동안 첫 번째 숫자는 0으로 고정.

이중 for문

i 는 지역변수 
변수 선언시 주의사항 선언된 변수는 사용 불가능.
for(int i =1; i<10; i++) {
	for(int j =1; j<10; j++) {
		//i - j - k
		//for2~3중 쓸때 변수명 이렇게 쓴다.
		System.out.printf("%d*%d=%d\n",i,j,i*j);
	}
	System.out.println();
}

0개의 댓글

관련 채용 정보