자료형 변수; | 자료형[] 변수; |
---|---|
int a; -> 정수 1개 | int[] a; -> 정수 여러개 |
Book b; -> 책 1권 | Book[] b; -> 책 여러권 |
String s; -> 문자열 1개 | String[] s; -> 문자열 여러개 |
배열(Array)
: 동일한 데이터를 여러개 저장할 수 있는 구조(객체)
객체
로 취급한다.1차원 배열
= []
2차원 배열
= [][] // [행][열]
int[] a = new int[열];
1. 변수선언 | 2. 객체 생성 | 3.객체 연결(저장) |
---|---|---|
int[] a; | new int[5]; | a = new int[열]; |
arr | arr[0] | arr[1] | arr[2] | arr[3] | arr[4] | |
---|---|---|---|---|---|---|
address | --> | 10 int | 20 int | 30 int | 40 int | 50 int |
length
// Q. 정수 5개를 저장할 배열을 생성하고 모든 원소에 10을 저장하시오.
int[] a = new int[5];
a[0] = 10;
a[1] = 10;
a[2] = 10;
a[3] = 10;
a[4] = 10;
for (int i = 0; i < a.length; i++) { // 반복문 활용
a[i] = 10;
}
// Q. 정수 5개를 배열에 초기화
int[] a = {1,2,3,4,5};
기본배열
: 정수, 실수, 문자 등의 기본자료형을 다룰 때 사용객체배열
: Book, Member, Movie 등의 객체자료를 다룰 때 사용// Q. 영화 3편을 저장할 배열을 생성하고, 영화 3편의 데이터를 저장하고 출력하시오.
public class Movie { // Movie 클래스 생성
public String title;
public String day;
public String hero;
public String genre;
public int time;
public int age;
Movie[] m = new Movie[3];
m[0] = new Movie();
m[0].title = "아바타";
m[0].day = "2022.12.14";
m[0].hero = "제이크 설리";
m[0].genre = "액션";
m[0].age = 12;
m[1] = new Movie();
m[1].title = "아이언맨";
m[1].day = "2008.04.30";
m[1].hero = "로버트 다우니 주니어";
m[1].genre = "SF/액션";
m[1].age = 12;
m[2] = new Movie();
m[2].title = "스파이더맨";
m[2].day = "2021.12.15";
m[2].hero = "톰 홀랜드";
m[2].genre = "SF/액션";
m[2].age = 12;
for (int i = 0; i < m.length; i++){
System.out.println(m[i].title+"\t"+m[i].day+"\t"+m[i].hero+"\t"+m[i].genre+"\t"+m[i].age);
}
-> 출력값
아바타 2022.12.14 제이크 설리 액션 12
아이언맨 2008.04.30 로버트 다우니 주니어 SF/액션 12
스파이더맨 2021.12.15 톰 홀랜드 SF/액션 12
int[][] a = new int[행][열];
// Q. 3명의 학생의 3개 과목(국어,영어,수학)의 성적을 처리해야 하는경우
int[] kor = new int[3];
int[] eng = new int[3];
int[] mat = new int[3];
국어 | 영어 | 수학 |
---|---|---|
80점(학생1) | 85점(학생1) | 90점(학생1) |
국어 | 영어 | 수학 |
---|---|---|
90점(학생2) | 80점(학생2) | 85점(학생2) |
국어 | 영어 | 수학 |
---|---|---|
85점(학생3) | 90점(학생3) | 80점(학생3) |
-> 배열이 서로 인접되어 있지 않기 때문에 반복문 사용할 수 없음
int[] score = new int[3][3];
국어 | 영어 | 수학 |
---|---|---|
80점(학생1) | 85점(학생1) | 90점(학생1) |
90점(학생2) | 80점(학생2) | 85점(학생2) |
85점(학생3) | 90점(학생3) | 80점(학생3) |
-> 배열이 인접되어 있기 때문에 반복문 사용 가능
int[][] a = new int[2][4];
a.length | 1 | 2 | 3 | 4 | |||
---|---|---|---|---|---|---|---|
a | --> | a[0] | --> | a[0][0] = 1 | a[0][1] = 2 | a[0][2] = 3 | a[0][3] = 4 |
a[1] | --> | a[1][0] = 5 | a[1][1] = 6 | a[1][2] = 7 | a[1][3] = 8 |
row-major(행 우선)
a.length = 2
a[0].length = 4
a[1].length = 4
a[0][0] = 10; a[1][0] = 10;
a[0][1] = 10; a[1][1] = 10;
a[0][2] = 10; a[1][2] = 10;
a[0][3] = 10; a[1][3] = 10;
int[][] a = {
{1,2,3,4},
{5,6,7,8}
}
// 반복문 활용
for (int i=0; i<a.length; i++) {
for(int j=0; j<a[i].length; j++) {
System.out.print(a[i][j]);
}
Sysyem.out.println(); // 줄바꿈
}
-> a.length = [행] // 2
-> a[i].length = [열] // 4
int[][] a = new int[5][]; // 가변 배열은 첫자리만 입력하고 나머지 자리 수는 입력하지 않아도 된다.
a[0] = new int[1];
a[1] = new int[2];
a[2] = new int[3];
a[3] = new int[4];
a[4] = new int[5];
0 | 1 | 2 | 3 | 4 | |||
---|---|---|---|---|---|---|---|
a | 0 | --> | ㅁ | ||||
1 | --> | ㅁ | ㅁ | ||||
2 | --> | ㅁ | ㅁ | ㅁ | |||
3 | --> | ㅁ | ㅁ | ㅁ | ㅁ | ||
4 | --> | ㅁ | ㅁ | ㅁ | ㅁ | ㅁ |
int[][] a = new int[5][];
a[0] = new int[1];
a[1] = new int[2];
a[2] = new int[3];
a[3] = new int[4];
a[4] = new int[5];
for(int i=0; i<a.length; i++){
for(int j=0; j<a[i].length; j++){
a[i][j] = '★';
System.out.print((char)a[i][j]+"\t");
}
System.out.println(); // 줄바꿈
}
-> 출력값
★
★ ★
★ ★ ★
★ ★ ★ ★
★ ★ ★ ★ ★