배열의 배열

참조변수는 실제 값을 취하는 것이 아니라 주소값을 저장하기 때문에 다차원 배열이라기 보다는 배열의 배열이 맞는 표현이다. 하지만 통상 2차원 배열이라고 부른다.

 

배열의 배열 선언과 생성 그리고 초기화 방법 3가지

// 배열의 배열 선언과 생성 그리고 초기화
// 방법 1
//int[] arr1 = new int[3];	// 1차원 배열의 선언 예
int[][] arr1 = new int[3][3];

//arr1[0] = 1;	// 1차원 배열의 초기화 예
arr1[0][0] = 1;
arr1[0][1] = 2;
arr1[0][2] = 3; 
arr1[1][0] = 4;
arr1[1][1] = 5;
arr1[1][2] = 6;
arr1[2][0] = 7;
arr1[2][1] = 8;
arr1[2][2] = 9;  

// 방법 2
//int[] arr2 = {1, 2, 3};	// 1차원 배열의 선언 예
int[][] arr2 = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

// 방법 3
int[][] arr3 = new int[3][3];
int n = 1;
for (int i=0; i<arr3.length; i++)			// 큰 반복문, 큰 회전
{
    for (int j=0; j<arr3[i].length; j++)		// 작은 반복문, 작은 회전
    {
        // 테스트
        //System.out.println("i:" + i + ", j:" + j);	// 인덱스 출력
        arr3[i][j] = n;		// 00=1 01=2 02=3 10=4 11=5 12=6 ...
        n++;
    }
}

 

배열의 배열 요소 전체 출력

// 배열의 배열 요소 전체 출력
for (int i=0; i<arr3.length; i++)
{
    for (int j=0; j<arr3[i].length; j++)
    {
    	System.out.printf("%2d", arr3[i][j]);
    }
    System.out.println();
}

배열의 배열 여러가지 연습용 예제 코드

/*=========================
  ■■■ 배열 ■■■
  - 배열의 배열(2차원 배열)
=========================*/

// 배열의 배열(다차원 배열)을 활용하여
// 다음과 같은 데이터를 요소로 취하는 배열(5*5)을 구성하고
// 그 결과를 출력하는 프로그램을 구현한다.
// 단, 배열을 구성하는 구문과 출력하는 구문은
// 별도로 작성할 수 있도록 한다.

// 실행 예)
/*
  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
계속하려면 아무 키나 누르세요...
*/

public class Test088
{
	public static void main(String[] args)
	{
		// 배열의 배열 선언 및 메모리 할당
		int[][] arr = new int[5][5];
		
		// 변수 선언 및 초기화
		int n = 1;
		//-- 1 부터 1씩 증가하여 25까지 만들어낼 변수
		//	 (1 2 3 4 5 6 7 ... 23 24 25)

		// 배열의 배열을 반복문의 중첩 구문을 활용하여 구조화
		for (int i=0; i<arr.length; i++)		// outer
		{
			for (int j=0; j<arr[i].length; j++)	// inner
			{
				arr[i][j] = n;
				n++;	//-- n 이 1씩 증가
			}
		}

		//-- 여기까지 수행하면 배열의 각 방에 값 채우기 완료~!!!

		// 전채 요소 출력
		for (int i=0; i<arr.length; i++)
		{
			for (int j=0; j<arr[i].length; j++)
			{
				System.out.printf("%3d", arr[i][j]);
			}
			System.out.println();
		}
	}
}

// 실행 결과
/*
  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
계속하려면 아무 키나 누르십시오 . . .
*/
/*=========================
  ■■■ 배열 ■■■
  - 배열의 배열(2차원 배열)
=========================*/

// 배열의 배열(다차원 배열)을 활용하여
// 다음과 같은 데이터를 요소로 취하는 배열(5*5)을 구성하고
// 그 결과를 출력하는 프로그램을 구현한다.
// 단, 배열을 구성하는 구문과 출력하는 구문은
// 별도로 작성할 수 있도록 한다.

// 실행 예)
/*
  1  2  3  4  5
  2  3  4  5  6
  3  4  5  6  7
  4  5  6  7  8
  5  6  7  8  9
계속하려면 아무 키나 누르세요...
*/

public class Test089
{
	public static void main(String[] args)
	{
		//배열 선언 및 메모리 할당
		int[][] arr = new int[5][5];

		// 변수 선언 및 초기화
		int n=1;

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

		// 결과 출력
		for (int i=0; i<arr.length; i++)
		{
			for (int j=0; j<arr[i].length; j++)
			{
				System.out.printf("%3d", arr[i][j]);
			}
			System.out.println();
		}
		
	}
}

// 실행 결과
/*
  1  2  3  4  5
  2  3  4  5  6
  3  4  5  6  7
  4  5  6  7  8
  5  6  7  8  9
계속하려면 아무 키나 누르십시오 . . .
*/
/*=========================
  ■■■ 배열 ■■■
  - 배열의 배열(2차원 배열)
=========================*/

// 배열의 배열(다차원 배열)을 활용하여
// 다음과 같은 데이터를 요소로 취하는 배열(5*5)을 구성하고
// 그 결과를 출력하는 프로그램을 구현한다.
// 단, 배열을 구성하는 구문과 출력하는 구문은
// 별도로 작성할 수 있도록 한다.

// 실행 예)
/*
  1  2  3  4  5		→ i=0 j=0 → 1 출발 
  5  1  2  3  4		→ i=1 j=1 → 1 출발
  4  5  1  2  3		→ i=2 j=2 → 1 출발
  3  4  5  1  2		→ i=3 j=3 → 1 출발
  2  3  4  5  1		→ i=4 j=4 → 1 출발
계속하려면 아무 키나 누르세요...
*/

public class Test090
{
	public static void main(String[] args)
	{
		int[][] arr = new int[5][5];

		for (int i=0; i<arr.length; i++)
		{
			for (int j=i, n=1; n<=5; n++)
			{
				arr[i][j] = n;	
				j++;
				if(j==5)
					j=0;
				// 00 = 1	11 = 1	22 = 1
				// 01 = 2	12 = 2	23 = 2
				// 02 = 3	13 = 3	24 = 3
				// 03 = 4	14 = 4	20 = 4
				// 04 = 5	10 = 5	21 = 5
			}
		}



		for (int i=0; i<arr.length; i++)
		{
			for (int j=0; j<arr[i].length; j++)
			{
				System.out.printf("%3d", arr[i][j]);
			}
			System.out.println();
		}
	}
}

// 실행 결과
/*
  1  2  3  4  5
  5  1  2  3  4
  4  5  1  2  3
  3  4  5  1  2
  2  3  4  5  1
계속하려면 아무 키나 누르십시오 . . .
*/
/*=========================
  ■■■ 배열 ■■■
  - 배열의 배열(2차원 배열)
=========================*/

// 배열의 배열(다차원 배열)을 활용하여
// 다음과 같은 데이터를 요소로 취하는 배열(5*5)을 구성하고
// 그 결과를 출력하는 프로그램을 구현한다.
// 단, 배열을 구성하는 구문과 출력하는 구문은
// 별도로 작성할 수 있도록 한다.

// 실행 예)
/*
  1  6 11 16 21		→ i=0 j=0 → 1 출발 
  2  7 12 17 22		→ i=1 j=1 → 1 출발
  3  8 13 18 23		→ i=2 j=2 → 1 출발
  4  9 14 19 24		→ i=3 j=3 → 1 출발
  5 10 15 20 25		→ i=4 j=4 → 1 출발
계속하려면 아무 키나 누르세요...
*/

public class Test091
{
	public static void main(String[] args)
	{
		int[][] arr = new int[5][5];

		int n = 1;
		for (int i=0; i<arr.length; i++)
		{
			for (int j=0; j<arr[i].length; j++)
			{
				arr[j][i] = n++;		// ji
			}
		}

		for (int i=0; i<arr.length; i++)
		{
			for (int j=0; j<arr[i].length; j++)
			{
				System.out.printf("%3d", arr[i][j]);
			}
			System.out.println();
		}
	}
}

// 실행 결과
/*
  1  6 11 16 21
  2  7 12 17 22
  3  8 13 18 23
  4  9 14 19 24
  5 10 15 20 25
계속하려면 아무 키나 누르십시오 . . .
*/
/*=========================
  ■■■ 배열 ■■■
  - 배열의 배열(2차원 배열)
=========================*/

// 배열의 배열(다차원 배열)을 활용하여
// 다음과 같은 데이터를 요소로 취하는 배열(5*5)을 구성하고
// 그 결과를 출력하는 프로그램을 구현한다.
// 단, 배열을 구성하는 구문과 출력하는 구문은
// 별도로 작성할 수 있도록 한다.

// 실행 예)
/*
  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  →
계속하려면 아무 키나 누르세요...
*/

public class Test092
{
	public static void main(String[] args)
	{
		// 배열 선언 및 메모리 할당
		int[][] arr = new int[5][5];

		// 변수 선언
		int n=1;

		// 배열 초기화
		for (int i=0; i<arr.length; i++)
		{
			for (int j=0; j<arr[i].length; j++)
			{
				if (i%2 == 0)	// 홀수 행일 때 0 2 4
					arr[i][j] = n;

				else			// 짝수 행일 때	1 3
					arr[i][(5 - 1)-j] = n;

				n++;
			}
		}

		// 결과 출력
		for (int i=0; i<arr.length; i++)
		{
			for (int j=0; j<arr[i].length; j++)
			{
				System.out.printf("%3d", arr[i][j]);
			}
			System.out.println();
		}
	}
}
/*=========================
  ■■■ 배열 ■■■
  - 배열의 배열(2차원 배열)
=========================*/

// 배열의 배열(다차원 배열)을 활용하여
// 다음과 같은 데이터를 요소로 취하는 배열(4*5)을 구성하고
// 그 결과를 출력하는 프로그램을 구현한다.
// 단, 배열을 구성하는 구문과 출력하는 구문은
// 별도로 작성할 수 있도록 한다.

// 실행 예)
/*
  1  8  9 16 17
  2  7 10 15 18
  3  6 11 14 19
  4  5 12 13 20
계속하려면 아무 키나 누르세요...
*/

public class Test093
{
	public static void main(String[] args)
	{
		// 배열의 배열 선언 및 메모리 할당
		int[][] arr = new int[4][5];

		int n=1;
		

		for (int i=0; i<5; i++)
		{
			for (int j=0; j<4; j++)
			{
				if (i%2==0)
						arr[j][i] = n++;
				else
						arr[3-j][i] = n++;
			}

		}

		// 결과 출력
		for (int i=0; i<arr.length; i++)
		{
			for (int j=0; j<arr[i].length; j++)
			{
				System.out.printf("%3d", arr[i][j]);
			}
			System.out.println();
		}
	}
}

// 실행 결과
/*
  1  8  9 16 17
  2  7 10 15 18
  3  6 11 14 19
  4  5 12 13 20
계속하려면 아무 키나 누르십시오 . . .
*/
/*=========================
  ■■■ 배열 ■■■
  - 배열의 배열(2차원 배열)
=========================*/

// 배열의 배열(다차원 배열)을 활용하여
// 다음과 같은 데이터를 요소로 취하는 배열(5*5)을 구성하고
// 그 결과를 출력하는 프로그램을 구현한다.
// 단, 배열을 구성하는 구문과 출력하는 구문은
// 별도로 작성할 수 있도록 한다.

// 실행 예)
/*
   1   2   3   4  10
   5   6   7   8  26
   9  10  11  12  42
  13  14  15  16  58
  28  32  36  40 136
계속하려면 아무 키나 누르세요...
*/

public class Test095
{
	public static void main(String[] args)
	{
		int[][] arr = new int[5][5];

		int n = 0;

		for (int i=0; i<4; i++)
		{
			
			for (int j=0; j<4; j++)
			{
				n++;
				arr[i][j] = n;

				arr[i][4] += arr[i][j];
				arr[4][j] += arr[i][j];
				arr[4][4] += arr[i][j];
			}
		}

		// 결과 출력
		for (int i=0; i<arr.length; i++)
		{
			for (int j=0; j<arr[i].length; j++)
			{
				System.out.printf("%4d", arr[i][j]);
			}
			System.out.println();
		}
	}
}

// 실행 결과
/*
   1   2   3   4  10
   5   6   7   8  26
   9  10  11  12  42
  13  14  15  16  58
  28  32  36  40 136
계속하려면 아무 키나 누르십시오 . . .
*/

 

눈여겨 볼 예제

Test093 : 4*5형태 배열 연습 예제

Test094 : 배열을 스프레드시트(엑셀) 처럼 다룰 때 연산하는 방법을 잘 봐두면 유용하다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기