h-i-s-t-o-r-y

[Java] 배열(Array) 본문

Java

[Java] 배열(Array)

H' 2021. 7. 13. 10:15

> 배열(Array) ?

1. 동일한 자료형 + 메모리 상에 연속적으로 놓이게 한 것

2. 선언 형식 : 자료형 [] 배열명 = new 자료형 [배열크기];

 

ex) 3명의 국어점수를 저장하고 싶다.

int[] kors = new int[3];
kors[0] = 97;
kors[1] = 65;
kors[2] = 80;

int len = kors.length;	// 배열의 길이 = 3

for (int i = 0; i < len; i++) {		// 배열 길이만큼 반복해라
	System.out.println(kors[i]);	// 배열 요소를 출력해라
}

 

> "배열 초기화"의 의미

// 1
String[] names = new String[3];
names[0] = "홍길동";
names[1] = "김길동";
names[2] = "이길동";

// 2
String[] names = new String[] {"홍길동", "김길동", "이길동"};

// 3
String[] names = {"홍길동", "김길동", "이길동"};

 

> (주의)

문자열 세 값을 배열에 초기화 -> names 배열 크기는 3..

// error: java.lang.ArrayIndexOutOfBoundsException: 3
names[3] = "박길동";

새로운 요소 할당하려 하면 배열에 방이 없다고 오류가 난다!

 


> 배열의 길이 변경하기 (방 늘리기)

package days11;

import java.io.IOException;
import java.util.Scanner;

public class Ex05 {

	public static void main(String[] args) throws IOException {
		// p.189	[배열의 길이 변경하기]
		Scanner scanner = new Scanner(System.in);
		int [] m = new int[3];
		int idx = 0;
		char con = 'y';
		
		do {
			System.out.printf("> [%d]번째 요소의 정수값 입력 ? ", idx);
			
			
			// 방 다 찰때마다 3씩 늘리기
			if (m.length == idx) {
				int [] temp = new int [m.length+3];
				/*
				// 배열 복사하는 for문
				for (int i = 0; i < m.length; i++) {
					temp[i] = m[i];
				}
				*/
				// *** 배열 복사 함수 System.arraycopy()
				System.arraycopy(m, 0, temp, 0, m.length);
				m = temp;
			}
			
			
			m[idx++] = scanner.nextInt();
			System.out.print("\t> 계속 할거냐 ? ");
			con = (char) System.in.read();
			System.in.skip(System.in.available());
		} while (Character.toUpperCase(con)=='Y');
		
		
		System.out.println("=====");
		for (int i = 0; i < m.length; i++) {
			System.out.printf("> m[%d]=%d\n", i, m[i]);
		}
		
		
		
	}//main

}//class

> 다차원 배열

package days13;

import java.util.Arrays;

public class Ex02 {

	public static void main(String[] args) {
		// p.214 다차원 배열
		// 1차원 배열 -열
		// 2차원 배열 -행,열
		// 3차원 배열 -면,행,열
		// 4차원 배열 -권,면,행,열
		// : 
		
		/*
		int [] m = new int[8];
		for (int i = 0; i < m.length; i++) {
			System.out.printf("m[%d] = %d\t", i, m[i]);
		}
		*/
		
		/*
		// 2차원 배열 -행,열
		// 2행 4열 2차원 배열 m이라고 부른다
		int [][] m = new int[2][4];
		
		// 4반 30명
		int [] kors = new int[30];
		int [] kors = new int[120];		//1차원
		int [][] kors = new int[4][30];	//2차원
		kors[0][0] ~ kors[3][29]
		*/
		
		
		
		// 3차원 배열 -면,행,열
		// 2면 2행 2열 3차원 배열 m
		int [][][] m = new int[2][2][2];	//int 기억공간 8개
		
		
		
	}//main

}//class
package days13;

import java.util.Arrays;

public class Ex03 {

	public static void main(String[] args) {
		// 1차원 배열
		/*
		// 1차원 배열의 초기화
//		int [] m = new int[8];
		int [] m = new int[] {1,2,3,4,5};
		// 1차원 배열의 배열크기 - 배열명.length
		System.out.println(m.length);
		// 1차원 배열의 윗첨자값(UpperBound) : 배열크기 -1
		System.out.println(m.length - 1);
		// 1차원 배열 출력
		for (int i = 0; i < m.length; i++) {
			System.out.printf("m[%d]=%d ", i, m[i]);
		}
		*/
		
		// 2차원 배열
		/*
//		int [][] m = new int[4][2];
		// 2차원 배열의 초기화
		int [][] m = {{1,2}, {3,4}, {5,6}, {7,8}};
		System.out.println(Arrays.deepToString(m));
		
		// 2차원 배열의 크기
		System.out.println(m.length);	// 4 (행의 크기)
		System.out.println(m[0].length);	// 2 (0번째 행의 열 크기)
		System.out.println(m[1].length);	// 2 (1번째 행의 열 크기)
		System.out.println(m[2].length);	// 2 (2번째 행의 열 크기)
		System.out.println(m[3].length);	// 2 (3번째 행의 열 크기)
		// ** 열은 행의 주소값을 참조 ?
		
		// 2차원 배열 출력
		for (int i = 0; i < m.length; i++) {
			for (int j = 0; j < m[i].length; j++) {
				System.out.printf("m[%d][%d]=%d ", i, j, m[i][j]);
			}
			System.out.println();
		}
		*/
		
		// 3차원 배열
//		int [][][] m = new int [2][3][4];
		// 3차원 배열의 초기화
		int [][][] m = {	//2면 2행 4열
				
							{//1면
								{1,2,3,4},
								{5,6,7,8}
							},
							
							{//2면
								{9,10,11,12},
								{13,14,15,16}
							}
					   };
		
		// 3차원 배열의 크기
		System.out.println(m.length);		// 2 (면의 크기)
		System.out.println(m[0].length);	// 3 (행의 크기)
		System.out.println(m[0][0].length);	// 4 (열의 크기)
		
		// 3차원 배열 출력
		for (int i = 0; i < m.length; i++) {
			for (int j = 0; j < m[i].length; j++) {
				for (int j2 = 0; j2 < m[i][j].length; j2++) {
					System.out.printf("m[%d][%d][%d]=%d ",i,j,j2,m[i][j][j2]);
				}
				System.out.println();
			}
			System.out.println();
		}
		
		
		
		
		
	}//main

}//class
package days13;

public class Ex05 {

	public static void main(String[] args) {
		// p219 가변 배열
//		배열 크기 고정적이지 않고 유동적
		// 30명	4반	학생의 국어점수
		// 행:반(4)	열:학생수(30)
//		int [][] kors = new int[4][30];
		
		// 문제)	이런 경우에 '가변 배열'..
		// 1반25 2반17 3반30 4반21
		// int [] kors = new int[25+17+30+21];	//별로
		// int [][] kors = new int[4][30];		//괜찮
		int [][] kors = new int[4][];
		kors[0] = new int[25];
		kors[1] = new int[17];
		kors[2] = new int[30];
		kors[3] = new int[22];
		for (int i = 0; i < kors.length; i++) {
			for (int j = 0; j < kors[i].length; j++) {
				System.out.printf("[ ]");
			}
			System.out.println();
		}
		
	}

}

 

'Java' 카테고리의 다른 글

[Java] 정규표현식 - String.matches(regex) / pattern, matcher  (0) 2021.07.13
[Java] 함수(function) / 오버로딩(overloading)  (0) 2021.07.13
[Java] System.in.read()  (0) 2021.07.12
[Java] 별찍기  (0) 2021.07.12
[Java] 구구단  (0) 2021.07.12
Comments