ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 015. 배열의 선언과 초기화, 배열 중첩 (배열의 배열)
    SsY/Class 2023. 3. 3. 01:16
    728x90

    2023.02.14(화)

    배열
    - 배열의 선언과 초기화
    ○ 배열의 개요
    1) 자바에서의 배열이란 크기와 성격이 같은 일련의 원소들이 모여
        공동의 집합 구조를 갖는 자료의 집합체를 의미하는 것으로
        『동질적인 성격을 가진 자료들』에 대해서 개별적으로 자료형(Data Type)을 부여하지 않고
        하나의 이름을 가지고 일괄적으로 처리할 목적으로 사용된다.
    2) 자바에서의 배열은 다음과 같은 순서에 의해 사용된다.
        배열 선언 → 배열에 메모리 할당 → 배열 요소 접근(배열 요소의 사용)

    ○ 형식 및 구조
        자료형[] 변수명;
        변수명 = new 자료형[요소크기];
        변수명[인덱스] = 값;

         int[] arr;              // int들을 담는 그릇
         arr = new int[3]; // 배열 방의 개수는 3개
         arr[0] = 1;          // 시작이 0인 부분을 주의
         arr[1] = 2;
                :

    • Test079
      - 배열의 선언과 초기화 관찰
    더보기
    /*========================
          ■■■ 배열 ■■■
      - 배열의 선언과 초기화
    ========================*/
    
    public class Test079
    {
    	public static void main(String[] args)
    	{
    		// 배열 선언
    		int[] arr;
    
    		// 메모리 할당
    		arr = new int[10]; // 몇 칸인지 명시
    
    		// 배열은 다음과 같이
    		// 선언과 동시에 메모리 할당이 가능하다.
    		int[] arr2 = new int[10];
    
    		// 배열은 다음과 같이
    		// 선언과 메모리 할당 및 초기화가 가능하다.
    		int[] arr3 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
    		int arr4[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}; // 이것도 가능함
    		// 둘은 같은 구문지만 아래보다 위의 방식으로 쓰는 것이 논리적으로 이해하기 좋음
    
    		// 배열 요소 접근(사용)
    		arr[0] = 1;
    		arr[1] = 2;
    		arr[2] = 3;
    		
    		// ※ 값을 할당하지 않은 나머지 배열 공간은
    		//    비어있는 것이 아니라 자동으로 초기화된다. → 0(int 형 배열)
    
    		int num = 10;
    		System.out.println("num : " + num);
    		//--==>> num : 10
    
    		System.out.println("arr : " + arr);
    		//--==>> arr : [I@15db9742
    		//-- 배열을 출력하기 위해 배열 변수를 일반 변수처럼 사용하여
    		//   출력하는 구문으로 작성하게 되면
    		//   배열의 각 방에 들어있는 데이터가 출력되는 것이 아니라
    		//   우리가 알아볼 수 없는 코드가 출력된다.
    		//	 출력되는 값은 각 방에 들어있는 데이터가 아니지만, 메모리의 주소값도 아니다.
    		//	 (자바는 메모리 주소값에 사용자가 직접 접근하는 것을 허용하지 않는다.)
    		//   해시코드라고 부름
    
    		System.out.println("arr[0] : " + arr[0]);
    		//--==>> arr[0] : 1
    
    		System.out.println("arr[1] : " + arr[1]);
    		//--==>> arr[1] : 2
    
    		System.out.println("arr[2] : " + arr[2]);
    		//--==>> arr[2] : 3
    
    		System.out.println(arr[0] + ", " + arr[1] + ", " + arr[2] + ", "
    						+ arr[3] + ", " + arr[4] + ", " + arr[5] + ", "
    						+ arr[6] + ", " + arr[7] + ", " + arr[8] + ", "
    						+ arr[9]);
    		//--==>> 1, 2, 3, 0, 0, 0, 0, 0, 0, 0
    
    		// 반복문을 활용하여 배열에 담긴 데이터 전체 출력
    		for (int i=0; i<10; i++)	// i → 0 1 2 3 4 5 6 7 8 9
    		{
    			// 테스트
    			//System.out.println("i : " + i);
    
    			// 테스트
    			//System.out.println("arr[i] : " + arr[i]);
    
    			System.out.printf("arr 배열의 %d번째 방 : %d\n", i, arr[i]);
    			//--==>>
    			/*
    			arr 배열의 0번째 방 : 1
    			arr 배열의 1번째 방 : 2
    			arr 배열의 2번째 방 : 3
    			arr 배열의 3번째 방 : 0
    			arr 배열의 4번째 방 : 0
    			arr 배열의 5번째 방 : 0
    			arr 배열의 6번째 방 : 0
    			arr 배열의 7번째 방 : 0
    			arr 배열의 8번째 방 : 0
    			arr 배열의 9번째 방 : 0
    			*/
    		}
    	}
    }

    • Test080
      - 배열의 선언과 초기화 관찰
    더보기
    /*=====================================
    		     ■■■ 배열 ■■■
    	     - 배열의 기본적 활용
    ======================================*/
    
    // 임의의 정수들이 들어있는 배열의 숫자 데이터들 중
    // 짝수인 요소만 골라서 출력하고, 3의 배수인 요소만 골라서 출력하는
    // 프로그램을 구현한다.
    
    //  ※ 배열을 구성하는 임의의 정수 = 4 7 9 1 3 2 5 6 8
    
    // 실행 예)
    // 배열 요소 전체 출력
    // 4 7 9 1 3 2 5 6 8
    // 짝수 선택적 출력
    // 4 2 6 8
    // 3의 배수 선택적 출력
    // 9 3 6
    // 계속하려면 아무 키나 누르세요...
    
    public class Test080
    {
    	public static void main(String[] args)
    	{
    		// 배열 선언 및 초기화
    		// 방법 ①
    		/*
    		int[] arr = new int[9];
    		arr[0] = 4;
    		arr[1] = 7;
    			:
    		arr[8] = 8;
    		*/
    
    		// 방법 ②
    		int[] arr = {4, 7, 9, 1, 3, 2, 5, 6, 8};
    
    		//System.out.println(arr);
    		//--==>> [I@15db9742
    
    		//	※	일반적인 변수에 담긴 내용을 출력하는 형식(방법)으로는
    		//		배열에 담긴 데이터들을 출력할 수 없다.
            //-- 해시코드 (직접적으로 주소를 찾아 갈 수 없고, 주소값도 아니다)
    	
    		System.out.println("배열 요소 전체 출력");
    		for (int i = 0; i<9; i++)
    			System.out.print(arr[i] + " ");
    		System.out.println();
    		//--==>> 배열 요소 전체 출력
    		//        4 7 9 1 3 2 5 6 8
    
    		int[] arr2 = {4, 7, 9, 1, 3, 2, 5, 6, 8, 6, 8, 73,21 ,8 ,6 ,53 ,5, 5, 86 ,5 , 4, 5, 7, 6};
    
    		//System.out.println(arr2.length);
    		//--==>> 24
    
    		//System.out.println(arr.length);
    		//--==>> 9
    
    		//	※	 배열 arr의 길이 (방의 갯수) 확인
    		//		 : arr.length
    
    		// for (int i = 0; i<arr.length; i++)
    
    		/*
    		System.out.println("배열 요소 전체 출력");
    		for (int i = 0; i<20; i++)				// i → 0 ~ 19
    		{
    			System.out.print(arr[i] + " ");		// arr[0] ~ arr[19]
    		}
    		System.out.println();
    		//--==>> 에러발생 (런타임 에러)
    		//		 java.lang.ArrayIndexOutOfBoundsException
    		*/
    
    		System.out.println("짝수 선택적 출력");
    		for (int i = 0; i<arr.length; i++)
    		{
    			if (arr[i]%2==0)		// i번째 요소의 값이 짝수라면...
    			{
    				// 출력해~!!! → 해당 인덱스의 값을...
    				System.out.print(arr[i] + " ");
    			}
    		}
    		System.out.println();
    
    
    		System.out.println("3의 배수 선택적 출력");
    		for (int i=0; i<arr.length; i++)
    		{
    			if (arr[i]%3==0)
    			{
    				//출력해~!!!
    				System.out.print(arr[i] + " ");
    			}
    		}
    		System.out.println();
    		//--==>> 3의 배수 선택적 출력
    		//       9 3 6
    	}
    }
    
    // 실행 결과
    /*
    배열 요소 전체 출력
    4 7 9 1 3 2 5 6 8
    짝수 선택적 출력
    4 2 6 8
    3의 배수 선택적 출력
    9 3 6
    계속하려면 아무 키나 누르십시오 . . .
    */

    ※ 배열의 출력
     - 배열 출력 시에는 일반 변수와 같이 배열 이름으로만 출력을 할 경우에는, 
       자바가 자체적으로 내장해둔 해시코드를 읽어오게 된다.
     - 배열 방 하나하나를 지정해서 반복문을 통해서 출력을 해야한다.

    ※ 배열의 길이
     - 배열명.length
     - 위와 같이 사용하면 배열방의 갯수를 확인할 수 있다.
       단 , 배열 출력을 위해서 사용할 경우에는
       배열은 0번째 방부터 시작하기 때문에 배열방 갯수를 포함하여 출력하게 되면
       배열의 방의 범위를 벗어나게 되므로 java.lang.ArrayIndexOutOfBoundsException 런타임 에러를 만나게 된다.


    • Test081
      - 배열의 선언과 초기화
      - 배열의 기본적 활용
    더보기
    /*=====================================
    		 ■■■ 배열 ■■■
    	- 배열의 선언과 초기화
    	- 배열의 기본적 활용
    ======================================*/
    
    //	『char』 자료형을 요소로 구성하는 배열을 만들어
    //	그 배열의 각 방에 알파벳 대문자를 채우고
    //	채워진 그 배열의 전체 요소를 출력하는 프로그램을 구현한다.
    //	단, 채우는 구문과 출력하는 구문은 따로 분리하여 처리할 수 있도록 한다.
    
    //	실행 예)
    //	A B C D E F G H I J K ... V W X Y Z
    //	계속하려면 아무 키나 누르세요...
    
    public class Test081
    {
    	public static void main(String[] args)
    	{
    		//	영문 알파벳 대문자 배열 구성
    		//	방법 ①
    		char[] arr1;
    		arr1 = new char[26];
    
    		arr1[0] = 'A';
    		arr1[1] = 'B';
    		arr1[2] = 'C';
    		//	:
    		arr1[25] = 'Z';
    
    		//	방법 ②
    		char[] arr2 = {'A','B','C','D','F','G','H', ......,'Z'};
    
    		//	방법 ③
    		char[] arr3 = new char[26];
    		for (int i=0, ch=65; i<arr3.length; i++, ch++)	// i → 0 ~ 25, ch → 65 ~ 90
    		{
    			arr3[i] = (char)ch;
    		}
    
    		// 배열 요소 전체 출력
    		for (int i=0; i<arr3.length; i++)
    			System.out.print(arr3[i] + " ");
    		System.out.println();	// 개행
    	}
    }
    
    // 실행 결과 
    /*
    A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
    계속하려면 아무 키나 누르십시오 . . .
    */

    • Test082
      - 배열의 선언과 초기화
      - 배열의 기본적 활용
    더보기
    /*=====================================
                  ■■■ 배열 ■■■
    	- 배열의 선언과 초기화
    	- 배열의 기본적 활용
    ======================================*/
    
    // 사용자로부터 인원수를 입력받고
    // 입력 받은 인원 수 만큼의 학생 이름과 전화번호를 입력받고
    // 이렇게 입력받은 데이터를 이름 배열과 전화번호 배열로 구성하여
    // 결과를 출력할 수 있는 프로그램을 구현한다.
    
    // 실행 예)
    // 입력 처리할 학생 수 입력(명, 1~10) : 25
    // 입력 처리할 학생 수 입력(명, 1~10) : -5
    // 입력 처리할 학생 수 입력(명, 1~10) : 3
    // 이름 전화번호 입력[1] (공백 구분) : 홍길동 010-1111-1111
    // 이름 전화번호 입력[2] (공백 구분) : 고길동 010-2222-2222
    // 이름 전화번호 입력[3] (공백 구분) : 윤석원 010-3333-3333
    
    // ---------------------
    // 전체 학생 수 : 3
    // ---------------------
    // 이름	  전화번호
    // 홍길동 010-1111-1111
    // 고길동 010-2222-2222
    // 윤석원 010-3333-3333
    // ---------------------
    // 계속하려면 아무 키나 누르세요...
    
    import java.util.Scanner;
    
    public class Test082
    {
    	public static void main(String[] args)
    	{
    		// Scanner 인스턴스 생성
    		Scanner sc = new Scanner(System.in);
    
    		// 사용자가 입력하는 학생 수를 담아낼 변수
    		int memberCount = 0;
    
    		do
    		{
    			System.out.print("입력 처리할 학생 수 입력(명, 1~10) : ");
    			memberCount = sc.nextInt();
    		}
    		while (memberCount<1 || memberCount>10);
    
    		// 사용자가 입력한 인원수를 토대로
    		// 이름 배열과 전화번호 배열을 생성해야 한다.
    
    		// 인원 수 만큼의 이름 저장 배열 구성
    		String[] names = new String[memberCount];
    
    		// 인원 수 만큼의 전화번호 저장 배열 구성
    		//String[] tels = new String[memberCount];
    		String[] tels = new String[names.length];
    		
    		// 인원 수 만큼의 안내 메세지 출력 및 입력 값 담아내기(→ 배열 방에...)
    		//for (int i = 0; i < names.length ; i++)
    		//for (int i = 0; i < tels.length ; i++)
    		for (int i = 0; i < memberCount ; i++)
    		{
    			System.out.printf("이름 전화번호 입력[%d](공백 구분) : ", (i+1));
    
    			// 고길동 010-2222-2222
    			// ------		
    			names[i] = sc.next();
                
    			// 고길동 010-2222-2222
    			//        -------------
    			tels[i] = sc.next();
    		}
    
    		// 최종 결과(이름, 전화번호) 출력
    		System.out.println();
    		System.out.println("---------------------");
    		System.out.printf("전체 학생 수 : %d명\n",memberCount);
    		System.out.println("---------------------");
    		// memberCount == names.length == tels.length
    
    		System.out.println("이름   전화번호");
    
    		// 학생 리스트 반복 출력
    		for (int i=0; i<memberCount; i++)
    			System.out.printf("%3s %14s\n", names[i], tels[i]);
    		System.out.println("---------------------");
    	}
    }

    • Test083 (과제)
      - 배열의 선언과 초기화
      - 배열의 기본적 활용
    // ○ 과제
    // 사용자로부터 임의의 정수를 임의의갯수만큼 입력받아
    // 입력받은 수 중에서 가장 큰 수를 출력하는 프로그램을 구현한다.
    // 단, 배열을 활용하여 구현할 수 있도록 한다.
    // (→ 갯수만큼 입력받은 정수들로 배열 구성)

    // 실행 예)
    // 입력할 데이터의 갯수 : 12
    // 데이터 입력(공백 구분) : 76 85 22 54 64 91 21 78 32 11 88 20
    // >> 가장 큰 수 → 91
    // 계속하려면 아무 키나 누르세요...

    풀이

    더보기
    import java.util.Scanner;
    
    public class Test083
    {
    	public static void main(String[] args)
    	{
    		int n;
    		Scanner sc = new Scanner(System.in);
    		do
    		{
    			System.out.print("입력할 데이터의 갯수 : ");
    			n = sc.nextInt();
    		}
    		while (n<1);
    		
    		int[] arr = new int[n];
    
    		System.out.print("데이터 입력(공백 구분) : ");
    		for (int i=0; i<n; i++)
    			arr[i] = sc.nextInt();
    		
    		for (int i=0; i<n-1; i++)
    		{
    			for (int j=0+i; j<n; j++)
    			{
    				if (arr[i]>arr[j])
    				{
    					arr[i]=arr[i]^arr[j];
    					arr[j]=arr[j]^arr[i];
    					arr[i]=arr[i]^arr[j];
    				}
    			}
    		}
    
    		System.out.printf(">> 가장 큰 수 → %d\n", arr[n-1]); 
    	}
    }
    // 실행 결과
    /*
    입력할 데이터의 갯수 : 4
    데이터 입력(공백 구분) : 20 50 87 3
    >> 가장 큰 수 → 87
    계속하려면 아무 키나 누르십시오 . . .
    */

    • Test084 (과제)
      - 배열의 선언과 초기화
      - 배열의 기본적 활용
    // ○ 과제
    // 사용자로부터 임의의 학생 수를 입력받고
    / 그만큼의 점수(정수 형태)를 입력받아 
    전체 학생 점수의 합, 평균, 편차를 구해서
    결과를 출력하는 프로그램을 구현한다.

    // 실행 예)
    // 학생 수 입력 : 3
    // 1번 학생의 점수 입력 : 90
    // 2번 학생의 점수 입력 : 82
    // 3번 학생의 점수 입력 : 64
    // >> 합 : 125
    // >> 평균 : 78.7
    // >> 편차
    // 90 : - 11.3
    // 82 : - 3.3
    // 64 : 14.7
    // 계속하려면 아무 키나 누르세요...

    풀이

    더보기
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.IOException;
    
    public class Test084re
    {
    	public static void main(String[] args) throws IOException
    	{
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		int n;
    		int tot=0;
    		double avg;
    
    		do
    		{
    			System.out.print("학생 수 입력 : ");
    			n = Integer.parseInt(br.readLine());
    		}
    		while (n<1);
    
    		int[] arr = new int[n];
    
    		for (int i=0; i<n; i++)
    		{
    			System.out.printf("%d번 학생 점수 입력 : ", i+1);
    			arr[i] = Integer.parseInt(br.readLine());
    			tot += arr[i];
    		}
    		avg = (double)tot/n;
    
    		System.out.println();
    		System.out.println(">> 합   : " + tot);
    		System.out.printf(">> 평균 : %.1f\n",avg);
    		System.out.println(">> 편차");
    
    		for (int i=0; i<n; i++)
    		{
    			System.out.printf("%d : %.1f\n", arr[i], avg-arr[i]);
    		}
    		System.out.println();
    	}
    }

    배열
    - 배열의 배열 
    • Test085
      - 배열의 배열 (다중 배열 / 배열 중첩) 관찰
    배열은 한 번 선언하면, 그 크기를 줄이거나 늘일 수 없다.
       -  "가변 배열" ?
          이 가변 배열 역시 크기를 늘이거나 줄일 수 없는 대신에
          메모리의 다른 공간에 늘어나거나 줄어든 공간을 확보해서
          기존과의 연결을 끊고 새로운 연결을 만들어내 공간이 늘거나 줄어들어 보이게 되는 개념이다.
    더보기
    /*=====================================
                 ■■■ 배열 ■■■
                - 배열의 배열
    ======================================*/
    public class Test085
    {
    	public static void main(String[] args)
    	{
    		// 배열의 배열 선언과 초기화
    		// 방법 ①
    		// int[] arr1 = new int[3];
    		int[][] arr1 = new int[3][3];
    
    		//arr1[0] = 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;
    
    		// 방법 ②
    		//int[] arr2 = {1, 2, 3};
    		int[][] arr2 = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
    
    		// 방법 ③
    		int[][] arr3 = new int[3][3];
    		int n=1;
    		for (int i=0; i<arr3.length; i++)				// 웅~~~~~~~ 0		1		2
    		{
    			for (int j=0;j<arr3[i].length ; j++)		// 숑숑숑~~~ 0 1 2  0 1 2   0 1 2
    			{
    				// 테스트(확인)
    				//System.out.println("i : " + i + "j : " + j);
    				arr3[i][j] = n;
    				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();
    		}
    	}
    }
    
    // 실행 결과
    
    /*
     1 2 3
     4 5 6
     7 8 9
    계속하려면 아무 키나 누르십시오 . . .
    */

    - 배열 안에 배열이 담기는 것을 배열의 배열 또는 배열의 중첩이라고 한다.


    • Test086
      - 배열의 배열 (2차원 배열)
    더보기
    /*=====================================
                 ■■■ 배열 ■■■
          - 배열의 배열 (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 Test086
    {
    	public static void main(String[] args)
    	{
    		// 배열의 배열 선언
    		//int[][] arr;
    
    		// 배열의 배열 메모리 할당
    		//arr = new int[5][5]
    
    		// 배열의 배열 선언 + 메모리 할당
    		int[][] arr = new int[5][5];
    
    		// 변수 선언 및 초기화
    		int n=1;								// 1 2 3 4 .... 23 24 25
    
    		// 배열의 배열을 반복문의 중첩 구문을 활용하여 구조화
    		for (int i=0; i<arr.length; i++)				// 웅 ~ → outer for 문 → 0		1		 2		 3		 4
    		{
    			for (int j=0; j<arr[i].length; j++)			// 쑝쑝 → inner for문 →  01234	 01234    01234   01234   01234
    			{
    				// 00 01 02 03 04
    				// 10 11 12 13 14
    				// 20 21 22 23 24
    				//		 :
    
    				arr[i][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();
    		}
    	}
    }
    
    // 실행 결과
    
    /*
      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
    계속하려면 아무 키나 누르십시오 . . .
    */

    • Test087
       - 배열의 배열(2차원 배열)
    더보기
    /*=====================================
                 ■■■ 배열 ■■■
          - 배열의 배열 (2차원 배열)
    ======================================*/
    
    // 배열의 배열(다차원 배열)을 활용하여
    // 다음과 같은 데이터를 요소로 취하는 배열을 구성하고
    // 그 결과를 출력하는 프로그램을 구현한다.
    // 단, 배열을 구성하는 코드와 출력하는 코드는 분리한다.
    
    // 실행 예)
    /*
      1  2  3  4  5		i=0
      2  3  4  5  6		i=1
      3  4  5  6  7		i=2
      4  5  6  7  8		i=3
      5  6  7  8  9		i=4
    계속하려면 아무 키나 누르세요...
    */
    
    public class Test087
    {
    	public static void main(String[] args)
    	{
    		// 배열의 배열 선언 및 메모리 할당
    		int[][] arr = new int[5][5];
    
    		// 주요 변수 선언
    		int n;
    
    		for (int i=0; i<arr.length; i++)			// 웅 i		0		1		2		3		4
    		{
    			n = 1+i;
    			for (int j=0; j<arr[i].length; j++)		// 쑝 j		01234	01234	01234	01234	01234
    			{
    				arr[i][j] = n;
    				n++;
    			}
    			//System.out.println();
    		}
    
    		// 전체 요소 출력
    		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
    계속하려면 아무 키나 누르십시오 . . .
    */

    • Test088
      - 배열의 배열 (2차원 배열)
    더보기
    /*=====================================
                 ■■■ 배열 ■■■
          - 배열의 배열 (2차원 배열)
    ======================================*/
    
    // 배열의 배열(다차원 배열)을 활용하여
    // 다음과 같은 데이터를 요소로 취하는 배열을 구성하고
    // 그 결과를 출력하는 프로그램을 구현한다.
    // 단, 배열을 구성하는 코드와 출력하는 코드는 분리한다.
    
    // 실행 예)
    /*
      1  2  3  4  5		i=0		
      5  1  2  3  4		i=1		
      4  5  1  2  3		i=2		
      3  4  5  1  2		i=3		
      2  3  4  5  1		i=4			
    계속하려면 아무 키나 누르세요...
    */
    
    /*
    00 01 02 03 04 :
       11 12 13 14 : 15          → 10
          22 23 24 : 25 26       → 20 21
             33 34 : 35 36 37    → 30 31 32
                44 : 45 46 47 48 → 40 41 42 43
                                //-=> 즉, 5를 0으로 만들면 값이 제대로 담긴다!
    */
    public class Test088
    {
    	public static void main(String[] args)
    	{
    		int[][] arr = new int[5][5];
    		int i,j,n;
    
    		for (i=0; i<5; i++)				//	0		1		2		3		4
    		{
    			for (j=i, n=1; n<=5; n++)	//	12345	12345	12345	12345	12345
    			{
    				arr[i][j] = n;
    				j++;
    				if (j==5)
    					j=0;
    			}
    		}
    
    		for (i=0; i<arr.length; i++)
    		{
    			for (j=0; j<arr.length; j++)
    			{
    				System.out.printf("%3d",arr[i][j]);
    			}
    			System.out.println();
    		}
    	}
    }

     

    // 개인적 감상

    더보기

    처음 배열을 배우면서, 배열을 구성하거나 출력하는 방법은 이해하기 쉬웠으나
    비교적으로 배열을 사용해야하는 이유와 배열을 구성하는 방법을 이해하기가 어려웠다.
    for 구문을 중첩하여 다차원 배열을 구성해야하는데, for구문의 중첩을 잘 하지 못해 조금 더 어려웠던 것 같다.

    지금은 배열을 구성하는 방법과 사용하는 이유 역시 다양한 문제를 풀면서 깨달아가고 있으나,
    그래도 문제를 분석하여 해결방법을 모색하는 것은 아직 쉽지 않다는 것이 아쉬운 마음이 든다.

    앞으로도 많은 문제를 푸는 방법을 생각할 시간을 충분히 가져보면서 많은 해결책에 익숙해져나가야겠다. 

    728x90
Designed by planet-si