본문 바로가기
개발/자바

(Java) n차원 배열, ArrayList

by kakk789 2022. 3. 30.

일반 배열

  • 자료형이 같은 기억장소의 모임
int [ ]변수명1;                  // 배열의 선언
변수명1 = new int [ 배열의 개수 ];   // 배열의 생성

int []student= {28,23,27,26,26};  //배열의 선언과 동시에 초기화까지

2차원 배열

  • 2차원 배열에서 length는 행의 길이임
int [][]b = new int[4][3];  // 4*3 배열 생성

문) 아래와 같이 출력 할 것

		//5행 5열의 정수형 2차원 배열을 생성하고, 1부터 1씩 증가한 값을 저장
		//조건 1: 맨 마지막 열에는 각 행의 합이 누적 되도록하고
		//조건 2: 맨 마지막 행에는 각 열의 합이 누적되도록 함
		//조건 3: 그리고 마지막 행 열에는 모든 요소의 총 합이 누적 되도록 함
		
		//	 	0	 1	  2	   3	 4
		//	 0 [1]	[2]	 [3]  [4]  [10]  1+2+3+4 = 10
		//	 1 [5]	[6]  [7]  [8]  [26]
		//	 2 [9]	[10] [11] [12] [42]
		//	 3 [13] [14] [15] [16] [58]		
		//	 4 [28] [32] [36] [40] [136]		
		
		int a[][] = new int[5][5];
		int n=1;
		int sum=0;
		for (int i=0; i<a.length-1; i++) {		// 줄수를 위한 반복문
			for (int j=0; j<a.length-1; j++) {	// 칸수를 위한 반복문
				a[i][j] = n++;
				a[i][4] = a[i][4] + a[i][j];	// 행 더하기
				a[4][j] = a[4][j] + a[i][j]; // 열 더하기
				sum += a[i][j]; // 마지막 행, 열에 모든 요소의 합 누적
			}
		}	
		a[4][4]=sum;
		
		for (int i=0; i<a.length;i++) {
			for (int j=0; j<a.length; j++) {
				System.out.print(a[i][j]+"\t");
			}
			System.out.println();
		}

java에서는 행마다 열의 크기가 다른 배열을 만들 수 있음

--- 예시 ---
[ ] [ ]
[ ] [ ] [ ] [ ] [ ]
[ ] [ ] [ ]

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

 

		int [][]a = new int [3][];
		
		a[0] = new int[2];
		a[1] = new int[5];
		a[2] = new int[3];
		
		int n = 1;
		for (int i=0; i<a.length; i++) {
			for (int j=0; j<a[i].length; j++) {
				a[i][j] = n++;
			}
		}
		for (int i=0; i<a.length; i++) {
			for (int j=0; j<a[i].length; j++) {
				System.out.print(a[i][j]+"\t");
			}
			System.out.println();
		}

3차원 배열

  • 면, 행, 열으로 구성된 배열을 말합니다
--- 예시 ---
[ ] [ ] [ ] [ ] [ ]
[ ] [ ] [ ] [ ] [ ]
[ ] [ ] [ ] [ ] [ ]

[ ] [ ] [ ] [ ] [ ]
[ ] [ ] [ ] [ ] [ ]
[ ] [ ] [ ] [ ] [ ]


int [ ] [ ] [ ] a = new int [2] [3] [5]; // 면이 2개이고, 3행 5열짜리 배열

문) 아래와 같이 출력할 것

		int [][][]a = new int [2][3][5];
		
		for (int i=0; i<a.length; i++) { // a.length=2
			for(int j=0;j<a[i].length;j++) { // a[i].length == 3
				for(int k=0; k<a[i][j].length;k++) { // a[i][j].length ==5 
					a[i][j][k]=i;
				}
			}
		}

		// 출력하기
		for (int i=0; i<a.length; i++) { // a.length=2
			for(int j=0;j<a[i].length;j++) { // a[i].length == 3
				for(int k=0; k<a[i][j].length;k++) { // a[i][j].length ==5 
			
				System.out.print(a[i][j][k]+"\t");
				}
				System.out.println();
			}
			System.out.println();
		}

동적 배열 ArrayList

  • 배열을 동적으로 생성 가능함
ArrayList<자료형> ArrayTest= new ArrayList<자료형>();

ArrayTest.add(입력 값); //동적으로 배열을 계속 넣을 수 있음

ArrayTest.get( i ) // 넣었던 입력 값을 배열의 값을 가져옴 

문) 성적을 입력 받아 합계, 평균을 출력하시오

성적을 입력 받아 합계, 평균을 출력하시오

-1이 나오면 성적 입력 stop

입력 값 & 출력 값

		Scanner sc = new Scanner(System.in);
	
		ArrayList<Integer> n = new 	ArrayList<Integer>();
		
		int data;
		
		while(true){
			System.out.println("성적을 입력하세요");
			data = sc.nextInt();
			
			if (data == -1) {
				break;
			}
			n.add(data); //동적으로 배열을 계속 넣을 수 있음
		}
		
		int total = 0;
		
		for(int i=0; i<n.size(); i++) {
			
			total += n.get(i);// 넣어던 데이터를 가져옴
		}
		
		System.out.println("합계: "+total);
		System.out.println("평균: "+(double)total/n.size());

 

만약 자료형으로 class를 사용하게 됐을 경우

Book 클래스의 변수가 title, score를 갖고 있다면 ArrayList의 add 함수로 ArrayList 추가 할 때 각 열에 Book 객체의 주소 값이 저장되고 해당 주소값에는 [title, score]가 쌍으로 저장되어있다.

아래 그림 출력 값은 Book 객체를 2개 생성 후 [title, score]를 생성자를 이용하여 등록하고 add 했을 경우 ArrayList 출력 했을 때 주소값이 각각 1개 씩 객체수만큼 2개 들어간 것을 확인 가능

만약 주소 값 대신 저장된 [title, score]를 보고 싶다면 toString() 함수를 재정의 하여 출력 하면 됌

반응형

'개발 > 자바' 카테고리의 다른 글

이클립스 getter, setter/ 생성자 자동 생성 방법  (0) 2022.04.04
(Java) 선택문 (if, Switch)  (0) 2022.03.30
(Java) 반복문 / for / while/ do~while  (0) 2022.03.30
약수 및 소수 구하기  (0) 2022.03.30
중첩 if문 활용도  (0) 2022.03.29

댓글