본문 바로가기
코딩수업/AWS 클라우드환경 네이티브

7/28 자바(Java) 다차원 배열, 가변 배열, 배열의 복사, 다차원 배열 연습 문제

by 인생즐겜러 2022. 7. 28.
728x90
반응형

AWS 클라우드환경 네이티브 수업 53일차

 

 

 

진행

1. 배열 연습 문제 (7/27 에 포함시킴)

2. 다차원 배열

3. 가변 배열

4. 배열의 복사

5. 다차원 배열 연습 문제

 

그리고 난 조퇴에에에에에에엑~~~~

 

 

 

 

 

요약

1. 다차원 배열

2. 가변 배열

3. 배열의 복사 (System.arraycopy)

 

 

 

 

 


 

 

 

 

 

다차원 배열

 

배열은 2차원으로도 만들 수 있다.

구조는 아래와 같다.

 

방법1.
타입[][] 변수이름;
int[][] scroe;



방법2.
타입 변수이름[][];
int score[][];

 

 

 

다차원 배열에서의 각 요소를 표시하자면 아래와 같다.

 

0,0 0,1 0,2 0,3
1,0 1,1 1,2 1,3
2,0 2,1 2,2 2,3

 

위의 표에서

위에서 아래(↓)가 행.

왼쪽에서 오른쪽 방향(→) 이 열이다.

 

 

 

예를 들어보면 아래와 같은 데이터가 있을 때 각 요소는 이렇게 표현 할 수 있다.

 

int[][] score = {
	{ 30, 40, 50, 10 },
	{ 60, 70, 80, 10 },
	{ 90, 20, 45, 10 },
};
score[0][0] = 30 score[0][1] = 40 score[0][2] = 50 score[0][3] = 10
score[1][0] = 60 score[1][1] = 70 score[1][2] = 80 score[1][3] = 10
score[2][0] = 90 score[2][1] = 20 score[2][2] = 45 score[2][3] = 10

 

 

 

 

 

배열에서 반복문은 필수적인데

다차원 배열에서 length는 행과 열 각 축의 표시가 다르다.

 

 

 

행을 표현할 때는 보통

 

 for(int i = 0 ; i < score.length ; i++ ) {
 }

 

 

 

열을 표현할 때는 아래와 같다.

 

for(int j = 0 ; j <score[i].length ; j++) {
}

 

 

 

 

 


 

 

 

 

 

가변 배열

 

2차원 이상의 배열에 대해서 자유로운 형태의 배열을 구성할 수 있는데

그렇게 만든 배열을 말한다.

굉장히 자유도가 높다.

 

구조는 아래와 같다.

 

자료형[][] 변수 = new 자료형[배열의크기][]

=> 마지막 크기를 정의하는 부분이 비어있다.

 

 

 

예를 들면 아래와 같은 가변 배열이라면 모양새가 그 아래와 같다.

 

int[][] score = new int[4][]; 

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

 

score[0][0] score[0][1] score[0][2] score[0][3]
score[1][0]
score[2][0] score[2][1] score[2][2] score[2][3] score[2][4]
score[3][0] score[3][1]

 

 

 

 

 


 

 

 

 

 

배열의 복사

 

배열을 복사하려면 반복문을 사용해야하는데 해당 작업이 너무 귀찮다.

때문에 편하게 복사하는 클래스를 하나 소개한다.

바로 System 클래스의 arraycopy() 다. 

 

구조는 아래와 같다.

 

System.arraycopy(복사할 배열, 의 인덱스, 붙여넣은 배열, 의 인덱스, 복사할 갯수);

 

쉽게 말해

복사할 배열[인덱스] 부터 복사할 갯수 만큼을

붙여넣을 배열[인덱스] 부터 붙여 넣을거임!

이거다.

 

 

 

예시를 보면

 

package Lecture;

public class ArrayExam {

	public static void main(String[] args) {
		
		char[] abc = {'A', 'B', 'C', 'D'};	// abc.length
		char[] num = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
		// num.length

		
		char[] result = new char[num.length];
		
		System.arraycopy(num, 0, result, 0, num.length);	
		System.arraycopy(abc, 0, result, 0, abc.length);
		System.out.println(new String(result));
		
		
		System.arraycopy(num, 0, result, 0, 0);
		System.out.println(num);
	}
}



결과
ABCD456789
0123456789

 

첫 결과물 앞에 abc 배열의 값들이 붙은 것을 볼 수 있다.

 

 

 

 

 


 

 

 

 

 

다차원 배열 연습 문제

 

 

문제1. 학생들의 점수는 다음과 같다. 아래와 같은 결과물이 나오게 만들어라.

 

int[][] score = {
	{ 30, 40, 50 },	// 1번 학생의 국영수 점수
	{ 60, 70, 80 },	// 2번 학생의 국영수 점수
	{ 55, 65, 45 },	// 3번 학생의 국영수 점수
	{ 88, 91, 30 },	// 4번 학생의 국영수 점수
	{ 30, 45, 92 }	// 5번 학생의 국영수 점수
};



결과물
번호	국어	영어	수학	총점	평균
==========================================================
1	30	40	50	120	40
2	60	70	80	210	70
3	55	65	45	165	55
4	88	91	30	209	69
5	30	45	92	167	55
==========================================================
총점	263	311	297

 

 

 

 

 


 

 

 

 

 

문제1 답.

package LectureExam;

public class ArrayExam {

	public static void main(String[] args) {
		
		int[][] score = {
				{ 30, 40, 50 },	// 1번 학생의 국영수 점수
				{ 60, 70, 80 },	// 2번 학생의 국영수 점수
				{ 55, 65, 45 },	// 3번 학생의 국영수 점수
				{ 88, 91, 30 },	// 4번 학생의 국영수 점수
				{ 30, 45, 92 }	// 5번 학생의 국영수 점수
		};
		int korTotal = 0 ;
		int engTotal = 0 ;
		int matTotal = 0 ;
		
		System.out.println("번호\t국어\t영어\t수학\t총점\t평균");
		System.out.println("==========================================================");
 		for(int i = 0 ; i < score.length ; i++ ) {
 			int sum = 0;

 			System.out.print((i+1) + "\t");
 			for(int j = 0 ; j <score[i].length ; j++) {
 				System.out.print(score[i][j] + "\t");
 				sum += score[i][j];
 			}
 			System.out.println(sum + "\t" + sum/3);
 		}
 		
		System.out.println("==========================================================");
		System.out.print("총점\t");

			for(int k = 0 ; k <score.length ; k++) {
				korTotal += score[k][0];
				engTotal += score[k][1];					
				matTotal += score[k][2];										
			}		
		
		System.out.println(korTotal + "\t" + engTotal + "\t" + matTotal);
	}
}

 

 

 

 

 

 

 

 

 

728x90
반응형

댓글