안녕하세요 .
국비 기록용으로 남길려고합니다
참고 하실때 도움되셨으면좋겠습니다 ..!(너무믿지 말아주세요 ...)
2차원 배열
자료형이 같은 1차원 배열의 묶음으로 배열 안에 다른 배열 존재
2차원 배열은 할당된 공간마다 번호 두 개 부여
2차원 배열선언
배열 선언시 메모리 stack영역에 참조 변수 생성된다.
3가지 방법이존재하지만,
자료형[][] 배열명; <<이방법이 제일많이 사용된는것같다.
// 자료형[][] 배열명;
// 자료형 배열명[][];
// 자료형[] 배열명[];
int[][] arr1;
int arr1[][];
int[] arr1[];
2차원 배열할당
배열 할당 시 headp영역에 해당 크기만큼의 공간 할당
// 자료형[][] 배열명 = new 자료형[행크기][열크기]
int [][] arr = new int[3][4];
배열크기 확인
// 배열 크기확인하는방법
int arr[][] = new int[3][5];
// 행
arr.length; //행의 길이는 3
// 열
arr[0].length; //열의 길이는 5
arr[1].length; //열의 길이는 5
arr[2].length; //열의 길이는 5
이차원 배열 for문 사용
이차원 배열은 이중for문이 많이사용되는것 같다.
// 이차원 배열의 인덱스에 접근하기 위해서는 이중for문 사용
// arr1[0][0] ~ arr[2][4]
for(int i = 0; i < arr1.length; i++) {
for(int j = 0; j < arr1[i].length; j++) {
System.out.print(arr1[i][j] + " ");
}
System.out.println();
}
int[][] arr = new int[3][5];
// 중첩 for문을 이용하여 인덱스 순차 접근하여 값 기록
int value = 1;
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[i].length; j++) {
arr[i][j] = value++;
}
}
//출력
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[i].length; j++) {
System.out.printf("%2d ",arr[i][j]);
}
System.out.println();
}
이차원 가변 배열
행은 정해졌으나 각 행에 대한 열의 갯수가 정해지지 않은 상태
자료형이 같은 1차원 배열 여러 개를 하나로 묶은 것이 2차원 배열이므로
묶여있는 1차원 배열의 길이가 꼭 같을 필요는 없음
// 가변 배열
// => 행은 정해졌으나 각 행에 대한 열의 갯수가 정해지지 않은 상태
// 자료형이 같은 1차원 배열 여러 개를 하나로 묶은 것이 2차원 배열이므로
// 묶여있는 1차원 배열의 길이가 꼭 같을 필요는 없음
int[][] arr = new int[3][]; // 가변 배열 할당(행의 크기는 3행으로)
arr[0] = new int[2]; //0행은 2열로
arr[1] = new int[1]; //1행은 1열로
arr[2] = new int[3]; //2행은 3열로
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] + " ");
}
System.out.println();
}
예제
// double형 2행 4열 배열을 만들어
// 3명 학생의 국어(0행), 영어(1행) 성적을 입력 받고 마지막 열(3열)에는 합계를 담기
double[][] arr = new double[2][4];
Scanner sc = new Scanner(System.in);
for(int i = 0; i < arr.length; i++) {
// 국어 or 영어 합계
double sum = 0.0;
for(int j = 0; j < arr[i].length - 1; j++) {
if(i == 0) {
System.out.println(j + 1 + "번 학생 국어 점수 : ");
}
else {
System.out.println(j + 1 + "번 학생 영어 점수 : ");
}
arr[i][j] = sc.nextDouble();
sum += arr[i][j];
}
arr[i][3] = sum;
}
// 출력
for(int i = 0; i < arr.length; i++) {
if(i == 0) {
System.out.print("국어 점수 : ");
}else {
System.out.print("영어 점수 : ");
}
for(int j = 0; j < arr[i].length; j++) {
if(j < arr[i].length - 1) {
System.out.print(arr[i][j] + " ");
}else {
System.out.print("합계 : " + arr[i][j]);
}
}
System.out.println();
}
예제2
// char형 2차원 배열 5행 5열을 만들고 행과 열을 입력 받아
// 해당 좌표값을 'X' 로 변환해 2차원 배열 출력하기
// 반복 실행하되 행이나 열 입력 시 0미만 5이상의 수가 입력되면 프로그램 종료
Scanner sc = new Scanner(System.in);
char[][] arr = new char[5][5];
while(true) {
System.out.print("행 인덱스 입력>> ");
int row = sc.nextInt();
System.out.print("열 인덱스 입력>> ");
int col = sc.nextInt();
sc.nextLine();
if(row < 0 || row > 4 || col < 0 || col > 5) {
break;
}
arr[row][col] = 'X';
System.out.println("\t0\t1\t2\t3\t4\t");
for(int i = 0; i < arr.length; i++) {
System.out.print(i + "\t");
for(int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + "\t");
}
System.out.println();
}
System.out.println();
}
System.out.println("프로그램을 종료합니다.");
'프로그래밍 > JAVA' 카테고리의 다른 글
JAVA - 객체(2편) (0) | 2021.05.24 |
---|---|
JAVA - 객체(1편) (0) | 2021.05.23 |
JAVA - 배열 (0) | 2021.05.18 |
JAVA - 반복문(for, while), 분기문(break, continue) (0) | 2021.05.14 |
JAVA - 조건문(if, else, else if, switch) (0) | 2021.05.13 |