본문 바로가기

Java

5-1장 배열 (2)

1. 2차원 정방 행렬 배열

 

 - 2차원 배열 : 가로 및 세로 방향의 2차원으로 데이터를 저장하는 배열

 - 2차원 정방 행렬 : 모든 행의 길이가 같은 배열

a[0][0] a[0][1] a[0][2] a[0][3]
a[1][0] a[1][1] a[1][2] a[1][3]
a[2][0] a[2][1] a[2][2] a[2][3]

 - 자료형 [] [] 변수명

int[][] a;
double[][] b;
String[][] c;

 - 대괄호 안에는 배열의 인덱스가 들어감 

 - 세로 방향으로 숫자가 늘어나는 행(row)번호와 가로 방향으로 숫자가 늘어나는 열(column)번호로 구성

 

 - 메모리는 2차원 데이터를 바로 저장할 수 없다!!

 - 2차원 데이터를 1차원 데이터들로 나눠 저장

 - 2차원 배열은 1차원 배열을 원소로 포함하고 있는 1차원 배열

 

1) 배열 객체를 생성하고 값 대입하기 

 - 2차원 배열 객체를 선언한 후 가각의 인덱스 위치에 값을 하나씩 대입하는 것

 

 - 자료형[][] 참조 변수명 = new 자료형[행의길이][열의 길이];

   참조변수명[0][1] = 값;

   참조 변수명[0][2] = 값;

    ...

   참조 변수명 [행의 길이 -1][열의 길이 -1] = 값;

int[][] a = new int[2][3];
a[0][0] =1; a[0][1] =2; a[0][2] =3;
a[1][0] =4; a[1][1] =5; a[1][2] =6;

 - 길이가 3인 1차원 배열을 2개 포함하고 있는 1차원 배열

 - int [] : int를 저장하는 1차원 배열

 - int[][] : int[]를 저장하는 1차원 배열

 

 - 2차원 배열의 참조 변수 a 는 2개의 원소(1차원 배열)를 포함하고 있는 1차원 배열이므로

 참조 변수가 가리키는 곳으로 가면 2개의 방이 있음 

 - 이 2개의 방에는 서로 다른 1차원 배열의 위칫값이 들어 있음

 - 이 위칫값들이 가리키는 또 다른 힙 메모리의 공간에 객체의 실제 데이터 값이 들어 있음

 

 -2차원 배열의 길이 가져오기 

System.out.printnl(a.length); //2
System.out.println(a[0].length); //3
System.out.println(a[1].length); //3

 - a.length : 참조 변수 a가 가리키는 곳으로 가면 2칸의 공간이 있음

 - a[0].length : a가 가리키는 첫번째 방 a[0]이 가리키는 곳의 방 개수 

 - a[1].length : a가 가리키는 두번째 방 a[1]이 가리키는 곳의 방 개수 

 

2) 배열 객체의 행 성분부터 생성하고 열 성분 생성하기 

 

 - 2차원 배열의 행 성분만 먼저 생성하고, 각 행에 열 성분을 생성하는 것

 

 - 자료형[][] 참조 변수명 = new 자료형[행의 길이];

   참조 변수명[0] = 1차원 배열의 생성;

   참조 변수명[1] = 1차원 배열의 생성;

   ...

   참조 변수명 [행의 길이 -1] = 1차원 배열의 생성;

//1차원 배열 생성 방법1
int[][] a = new int[2][]; //행 성분 생성

a[0] = new int[3];
a[0][0]=1; a[0][1]=2; a[0][2]; //열 성분 생성
a[1] = new int[3];
a[1][0]=4; a[1][1]=5; a[1][2]=6;

//1차원 배열 생성 방법 2
int[][]a= new int[2][]; //행 성분 생성
a[0] = new int[]{1,2,3}; //열 성분 생성
a[1] = new int[]{4,5,6};

 - 참조 변수 a가 가리키는 곳 : 행의 개수만큼 메모리 공간을 차지하는 1차원 배열 

 - a[0] = new int[3] :

 int형 데이터 3개를 저장할 수 있는 공간을 만들어 힙 메모리에 넣고 (new int[3]) 저장한 위치 정보를 a[0]에 저장하라 

 - a[1] = new int[3];

int형 데이터 3개를 저장할 수 있는 공간을 만들어 힙 메모리에 넣고 (new int[3]) 저장한 위치 정보를 a[1]에 저장하라 

 

3) 배열의 자료형과 함꼐 대입할 값 입력하기 

 

 - 자료형과 함께 대입할 값 입력

 - 자료형[][] 참조 변수명 = new 자료형[][] { {값, 값,...,값},{값,값,...,값}};

 - 배열의 선언과 객체의 대입을 분리해 표현 가능

int[][] a= new int[][] {{1,2,3},{4,5,6}}; //o

int[][]b;
b = new int[][] {{1,2,3},{4,5,6}}; //o

 

 4) 대입할 값만 입력하기 

 

 - 2차원 정방 행렬 데이터에 대입할 값만 입력

 - 자료형[][] 참조 변수명 = {{값,값,...,값},{값,값,...,값}};

 - 배열의 선언과 객체의 대입을 분리해 표현 불가능

int[][] a={{1,2,3},{4,5,6}}; //o

int[][] b;
b = {{1,2,3},{4,5,6}}; //x

 

2. 2차원 비정방 행렬 배열

 

 - 비정방 배열 : 각 행마다 열의 길이가 다른 2차원 배열 

a[0][0] a[0][1]  
a[1][0] a[1][1] a[1][2] a[1][3]
a[2][0] a[2][1] a[2][2]  

 

1) 배열 객체의 행 성분부터 생성하고 열 성분 생성하기

 

 -행의 성분만 먼저 생성하고, 각각의 행에 열의 성분을 추가하는 방법

 - 자료형[][] 참조 변수명 = new 자료형[행의 길이][];

   참조 변수명[0] = 1차원 배열의 생성;

   참조 변수명[1] = 1차원 배열의 생성;

    ...

    참조 변수명 [행의 길이 -1] = 1차원 배열의 생성;

//1차원 배열 생성 방법 1사용
int[][] a= new int[2][];
a[0]= new int[2]; //첫 번째 행의 열의 개수 
a[0][0] =1; a[0][1]=2; 
a[1] = new int[3]; //두 번째 행의 열의 개수 
a[1][0]=3; a[1][1]=4; a[1][2] =5;

//1차원 배열 생성 방법 2사용
int[][]a = new int[2][];
a[0] = new int[]{1,2};
a[1] = new int[]{3,4,5};

 

 - 2차원 비정방 배열에서의 배열의 길이 가져오기 

System.out.println(a.length); //2
System.out.println(a[0].length); //2
System.out.println(a[1].length);//3

 

 2) 자료형과 대입할 값만 입력하기 

 

 - 자료형과 함께 이중 중괄호를 사용해 생성할 떄 초깃값을 넘겨 주는 것

 - 자료형[][]  참조 변수명 = new 자료형[][] {{값, 값,..,값},{값,값,..,값}};

 - 배열의 선언과 객체의 대입을 분리해 표현 가능

int[][] a= new int[][]{{1,2},{3,4,5}}; //o

int[][] b;
b = new int[][] {{1,2},{3,4,5}}; //o

 

 3) 대입할 값만 입력하기 

 

 - 초깃값만 이중 중괄호에 넣어 대입하는 것

 - 자료형[][]  참조 변수명 =  {{값, 값,..,값},{값,값,..,값}};

 - 배열의 선언과 객체의 대입을 분리해 표현 불가능

int[][] a ={{1,2},{3,4,5}}; //o

int[][] b;
b={{1,2},{3,4,5}}; //x

 

3. 2차원 배열의 출력

 

 - 이중 for문 사용

 - 바깥쪽 for문에는 행의 개수를 나타내는 a.length, 안쪽 for문에는 각 행별 열의 개수를 나타내는 a[i].length 사용

 - 이중 for문을 이용한 2차원 배열 원소 출력

int[][] a= {{1,2},{3,4,5}};

for(int i=0; i <a.length; i++){
	for(int j=0; j < a[i].length; j++) {
    	System.out.println(a[i][j]);
    }
}

 - 이중 for-each문을 이용한 2차원 배열 원소 출력

int[][] a={{1,2},{3,4,5}};

for(int[] m:a) {
	for(int[] n:m) {
    	System.out.println(n);
    }
}

 - 2차원 배열의 원소 값 출력

package arrray;

public class array_4 {
	public static void main(String[] args) {
		//2차원 데이터의 배열의 길이 
		int[][] array1 = new int[2][3];
		System.out.println(array1.length); //행 개수 		
		System.out.println(array1[0].length); //첫번 째 행의 열개수 
		System.out.println(array1[1].length); //두번 째 행의 열개수 
		System.out.println();
		
		int[][] array2 = new int[][] {{1,2},{3,4,5}};
		System.out.println(array2.length); 		
		System.out.println(array2[0].length);  
		System.out.println(array2[1].length); 
		System.out.println();
		
		//2차원 배열의 출력 방법
		System.out.print(array2[0][0]+"");
		System.out.print(array2[0][1]+"");
		System.out.println();
		System.out.print(array2[1][0]+"");
		System.out.print(array2[1][1]+"");
		System.out.println(array2[1][2]);
		System.out.println(array2[1][2]);
		System.out.println();
		
		//이중 for문 사용
		for(int i=0; i<array2.length; i++) {
			for(int j=0; j < array2[i].length; j++) {
				System.out.print(array2[i][j]+"");
			}
			System.out.println();
		}
		System.out.println();
		
		//이중 for-each문 사용
		for(int[] array:array2) {
			for(int k:array) {
				System.out.print(k+"");
			}
			System.out.println();
		}
		
		
	}
}

 

4. main() 메서드의 입력매개변수 

 

public static void main(String[] ar){
}

 - String[] : 여러개의 String 객체를 묶어 저장하는 문자열 배열

 - 자바 코드를 실행하면 자바 가상 머신은 가장 먼저 main() 메서드를 실행

 - 이때 개발자는 main()메서드를 실행하는 데 필요한 자료를 배열 타입으로 넘겨 줄 수 있음

 - [Run -> Run Configurations] 메뉴

 

package arrray;

public class array_5 {
	public static void main(String[] ar) {
		String a= ar[0]; //"안녕하세요"
		String b= ar[1]; //"3"
		String c= ar[2]; //"5.8"
		
		System.out.println(a); //"안녕하세요"
		System.out.println(b); //"3"
		System.out.println(c); //"5.8"
		
		System.out.println(b+1); // "31" String+int=stirng
		System.out.println(c+1); //"5.8"
		
		int d=Integer.parseInt(b); // 3 String ->int로 변환
		double e=Double.parseDouble(c); // 5.8String -> double로 변환
		System.out.println(d+1); //4
		System.out.println(e+1); //6.8
		
		
	}
}

'Java' 카테고리의 다른 글

6-1 장 클래스와 객체의 개념  (2) 2023.04.24
5-2장 문자열을 저장하는 String  (0) 2023.04.23
5-1장 배열(1)  (0) 2023.04.22
4-2장 제어 키워드  (0) 2023.04.21
4-1장 제어문 (2) 반복문  (0) 2023.04.21