[Java] 배열(array) & 다차원 배열

Junseo Kim·2019년 12월 17일
1

[Java]자바 기초

목록 보기
8/35

배열

하나의 변수이름 안에 여러 값이 들어가 있는 것

같은 타입의 변수가 연속적으로 사용될 때 사용

실제 메모리상에 값이 들어가는 형태 예시

스크린샷_2019-08-16_오전_1.19.16.png

<기본 형태>

int [ ] array = {10,11,15};
String [ ] fruits = {"사과","딸기","수박"};

System.out.println(array[0]);
System.out.println(fruits[0]);

스크린샷_2019-08-16_오전_1.24.57.png

Tip) 배열 안의 값이 어떤 것이 들어갈 지 모르는 경우 배열의 크기만 선언해주는 방법

String [ ] fruits = new String [3] //크기가 3인 배열 생성 

//미리 만들어 놓은 빈 공간에 값을 채워넣는 방법
fruits[0]="사과";
fruits[1]="딸기";
fruits[2]="수박";

Tip) 배열안의 값들을 쉽게 출력하는 방법 -> 반복문 활용
배열.length = 선언된 배열의 길이

즉, 밑의 예시에서는 3이다.

String[]fruits = new String[3];
fruits[0]="딸기";
fruits[1]="사과";
fruits[2]="수박";
		
//for문으로 배열출
for(int i=0;i<fruits.length;i++) {
	System.out.println(fruits[i]);
}
		
//while문으로 배열 출
int i=0;
while(i<fruits.length) {
	System.out.println(fruits[i]);
	i++;
}

스크린샷_2019-08-16_오전_1.43.26.png

다차원 배열

일차원 배열 만으로는 한계가 있다.

예를 들어, 학교를 생각해보면, 각 반마다 학생 여러명이 있을 수 있고, 반 자체도 여러 반이 있기 때문이다. 만약 반이 엄청나게 많다면, 일일히 배열 선언 해 줄 수 없다.

String [ ] room1 = new String[30]; //1 반 
String [ ] room2 = new String[30]; //2 반 
String [ ] room3 = new String[30]; //3 반 
String [ ] room4 = new String[30]; //4 반 
String [ ] room5 = new String[30]; //5 반 
.....
*일일히 선언 불가능! -> 다차원배열

<기본형태>
String [ ][ ] school = new String [11][30]; //한 반에 30명씩 11반까지
Tip) 앞의 [ ]가 가로 개수, 뒤의 [ ]가 세로 개수라고 생각하거나 행렬처럼 생각하면 편하다.

30크기의 일 차원 배열이 11개 있다.

스크린샷_2019-08-17_오후_7.35.55.png

이차원 배열에 값을 넣어줄 땐, 일 차원 배열과 같은 형식으로 넣어주면 된다.
school[0][0] = "학생1";

Tip) 3 x 3 크기 이중 배열에 0부터 8까지 넣어보기

int [ ][ ]practice1 = new int[3][3];
int num=0;
for(int i=0;i<3;i++){ //줄이 3개이므로 3번 동작 
   for(int j=0;j<3;j++){ //배열에 숫자를 하나씩 입력하기 위한 반복문 
      practice1[i][j]=num++;
   }
}

Tip) 3 x 3 크기 이중 배열에 0부터 8까지 랜덤하게 중복없이 넣어보기

package array;

import java.util.Random;

public class multi_array {

	public static void main(String[] args) {
		Random r = new Random(); // 랜덤 값을 가져오기 위해 선언

		int[][] practice2 = new int[3][3]; // 3x3 사이즈 배열 메모리 할당

		for (int i = 0; i < practice2.length; i++) {
			for (int j = 0; j < practice2.length; j++) {
				practice2[i][j] = -1; // 0~8을 출력하기 위해 모든 값 -1로 초기화(기본 초기화가 0이기 때문)
			}
		}
		int num; // 랜덤 값 변수
		boolean condition = false; // 중복이 있을 시 반복문을 처음부터 돌리기 위함

		for (int i = 0; i < practice2.length; i++) {
			for (int j = 0; j < practice2.length; j++) {

				num = r.nextInt(9); // 0~8 사이 랜덤 값 가져오기

				if (!(i == 0 && j == 0)) { // 제일 처음 항목일 경우 비교할 필요가 없기 때문에
					for (int k = 0; k < practice2.length; k++) {
						int l = 0;
						while (l < practice2.length) {
							if (num == practice2[k][l]) { // 중복일 경우
								num = r.nextInt(9); // 새로운 랜덤 값
								condition = true; // 중복임을 표시
							} else {
								condition = false; // 중복이 아님을 표시
							}
							l++;
							if (condition == true) { // 중복일 경우 초기화 처음부터 다시 비교
								k = 0;
								l = 0;
							}
						}
					}
				}

				practice2[i][j] = num; // 중복되지 않은 최종 값을 배열에 저장

				System.out.println("index (" + i + "," + j + ") " + practice2[i][j]);
			}
		}

	}
}

스크린샷_2019-08-17_오후_11.42.06.png

0개의 댓글