고래씌
[JAVA] 6. 2차원 배열 본문
1. 2차원 배열
1) 2차원 배열 구조
// 이차원 배열 선언과 동시에 할당
int[][] arr = new int[3][5];
System.out.println(arr); // arr 주소값 출력. [[I@16진수주소값
System.out.println(arr[0]); // [I@16진수주소값 <-1차원 배열의 주소값 출력됨
System.out.println(arr[1][4]); // 0
▶ 행의 길이 출력하고자 할 때 => arr.length
▶ 열의 길이 출력하고자 할 때 => arr[0 or 1 or~].length
package com.kh.array;
public class C_DimensionalArray {
public void method1() {
// 일차원 배열
int[] arr1;
int arr2[];
// 이차원 배열 선언
int [][] arr3;
int arr4 [][];
int[]arr5[];
// 이차원 배열 선언과 동시에 할당
int[][] arr = new int[3][5];
System.out.println(arr); // arr 주소값 출력. [[I@16진수주소값
System.out.println(arr[0]); // [I@16진수주소값 <-1차원 배열의 주소값 출력됨
System.out.println(arr[1][4]); // 0
System.out.println();
System.out.println("행의 길이 : "+arr.length); // 행의 길이 : 3
System.out.println("0번 열의 길이 : "+arr[0].length); // 0번 열의 길이 : 5
System.out.println("1번 열의 길이 : "+arr[1].length); // 1번 열의 길이 : 5
System.out.println("2번 열의 길이 : "+arr[2].length); // 2번 열의 길이 : 5
System.out.println();
/*
* 출력(arr[0][0]) -> 1행 1열
* 출력(arr[0][1]) -> 1행 2열
* ...
* 출력(arr[0][4]) -> 1행 5열
* 출력(arr[1][0]) -> 2행 1열
* ...
* 출력(arr[2][4]) -> 3행 5열
*/
// 바깥쪽 반복문 -> 행에 대해 지정
for(int i=0; i<arr.length; i++) {
// 내부 반복문 => 열에 대해 지정
for(int j=0; j<arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}
public void method2() {
// 순서대로 1,2,3,4,5,6,7,.... 15까지 값을 대입하기
int[][] arr = new int[3][5]; // arr[0][0] -> 1, arr[0][1] -> 2 ..., arr[2][4] -> 15
int count = 1;
for(int i=0; i<arr.length; i++) {
for(int j=0; j<arr[i].length; j++) {
arr[i][j] = count++;
// arr[i][j] = i*5 + j +1;
System.out.printf("%-3d",arr[i][j]); // -3d% 왼쪽기준으로 정렬
}
System.out.println();
}
}
2. 이차원 배열 선언 및 할당과 동시에 초기화
public void method3() {
// 일차원 배열 선언 및 할당과 동시에 초기화
int[] arr = {1,2,3,4,5};
// 이차원 배열 선언 및 할당과 동시에 초기화
int[][] arr2 = {{1,2,3,4,5}, {6,7,8,9,10},{11,12,13,14,15}}; // [3][5]
for(int i=0; i<arr2.length; i++) {
for(int j=0; j<arr2[0].length; j++) {
System.out.print(arr2[i][j]+"/t"); // \t == tab
}
System.out.println();
}
}
3. 가변 배열
▶ 행의 크기는 변경이 불가능하나, 행별로 열의 개수를 내 마음대로 지정할 수 있다.
이차원 배열 == 일차원 배열을 여러개 묶은 형태
묶여있는 일차원배열의 길이가 다 같을 필요는 없기 때문
☞ 따라서 2차원 배열을 선언할 때 행의 크기를 지정후, 열의크기는 생략이 가능하다.
즉, 각 행의 열의 길이를 변경할 수 있다.
public void method4() {
int [][] arr = new int[3][]; // 가변 배열 행의 크기는 3, 열의 크기는 미정
System.out.println(arr); // [[I@16진수주소값
System.out.println(arr[0]); // null // 생성을 안해놓았기 때문에
System.out.println(arr.length); // 3
// System.out.println(arr[0][0]); // error
// 각 행별로 열의 크기가 지정되지 않았으므로 각 행에는 null 값이 대입된 상태
// 특정인덱스로 "접근"하려했기 때문에 NullPointerException 에러 발생
System.out.println();
arr[0] = new int[2];
arr[1] = new int[] {5,6,8};
arr[2] = new int[4];
/*
* 0 0
* 5 6 8
* 0 0 0 0
*/
int value = 1;
for(int i=0; i<arr.length; i++) {
for(int j=0; j<arr[i].length; j++) {
arr[i][j] = value++;
System.out.print(arr[i][j]+" "); // \t == tab
}
System.out.println();
}
}
public void method5() {
// char[][] 가변 배열 생성
char[][] arr = new char[3][];
/* 위 arr 배열의 값을 대입 및 출력
* a b c
* d e
* f g h i j k
*/
// arr[0] = new char[] {'a','b','c'};
// arr[1] = new char[] {'d','e'};
// arr[2] = new char[] {'f','g','h','i','j','k'};
arr[0] = new char[3];
arr[1] = new char[2];
arr[2] = new char[6];
char ch = 'a';
for(int i=0; i<arr.length; i++) {
for(int j=0; j<arr[i].length; j++) {
arr[i][j] = ch;
ch = (char)(ch+1);
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
public void method6() {
/*
* int형 2차원 배열을 만들어
* 0번행에는 국어점수를 3개 입력받고
* 1번행에는 영어점수를 3개 입력받은 후
* 각각 반복문을 활용해서 출력
*
* 입력예시 : xx 점수를 입력하세요 :
* 출력예시 : xx 점수 : xx xx xx
*/
Scanner sc = new Scanner(System.in);
int[][] arr = new int[2][3];
for(int i=0; i<arr.length; i++) { // 2회 반복
for(int j=0; j<arr[i].length; j++) { // 3회 반복
System.out.printf("%s점수를 입력하세요 : ", i == 0? "국어" : "영어");
arr[i][j] = sc.nextInt();
}
System.out.println();
}
for(int i=0; i<arr.length; i++) { // 2회 반복
System.out.printf("%s점수 : ", i == 0 ? "국어" : "영어");
for(int j=0; j<arr[i].length; j++) { // 3회 반복
System.out.print(arr[i][j]+ " ");
}
System.out.println();
}
}
'JAVA > JAVA 기초' 카테고리의 다른 글
[JAVA] 배열까지 종합문제 (0) | 2023.10.12 |
---|---|
[JAVA] 7. 객체(추상화, 캡슐화) (0) | 2023.10.11 |
[JAVA] 5-2. 배열 복사(얕은 복사, 깊은 복사 (0) | 2023.10.11 |
[JAVA] 5-1. 배열 실습문제 (0) | 2023.10.11 |
[JAVA] 5. 배열 (0) | 2023.10.10 |