하나의 변수이름 안에 여러 값이 들어가 있는 것
같은 타입의 변수가 연속적으로 사용될 때 사용
<기본 형태>
int [ ] array = {10,11,15};
String [ ] fruits = {"사과","딸기","수박"};
System.out.println(array[0]);
System.out.println(fruits[0]);
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++;
}
일차원 배열 만으로는 한계가 있다.
예를 들어, 학교를 생각해보면, 각 반마다 학생 여러명이 있을 수 있고, 반 자체도 여러 반이 있기 때문이다. 만약 반이 엄청나게 많다면, 일일히 배열 선언 해 줄 수 없다.
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개 있다.
이차원 배열에 값을 넣어줄 땐, 일 차원 배열과 같은 형식으로 넣어주면 된다.
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]);
}
}
}
}