배열
하나의 변수에 같은 종류의 데이터 여러 개를 그룹화 한 형태.
상황 제시
한 학급의 성적표를 보고 각 학생별로 총점과 평균을 구하라.
국어 | 영어 | 수학 | |
---|---|---|---|
철수 | 92 | 81 | 76 |
영희 | 72 | 95 | 84 |
민혁 | 80 | 86 | 98 |
3명씩 3과목이므로 9개의 변수가 필요.
int kor1 = 92;
int kor2 = 71;
int kor3 = 80;
// ...생략...
int math2 = 84;
int math3 = 98;
30명의 학생에 대한 20과목에 대한 점수라고 가정한다면 프로그램은 좀 더 복잡해 지고 더많은 변수를 소스코드상에 선언, 할당 해야 한다.
#01. 배열
같은 종류의 데이터를 그룹화 한 형태.
배열의 선언
데이터 타입 뒤에 재열임을 의미하는 []
를 명시한다.
int[] a;
배열의 할당
값을 대입하는 것이 아니라 배열의 칸을 결정하는 것임에 유의한다.
new 예약어 뒤에 데이터 타입을 다시 한번 명시하고 배열의 칸 수를 []
를 사용하여 지정한다.
a = new int[3];
선언과 할당의 통합
int a = new int[3];
2) 배열의 활용
값 저장하기
크기가 결정된 배열은 0부터 시작되는 일련번호를 부여받는다. 이를 배열의 인덱스라고 한다.
값을 저장하기 위해서는 배열변수 이름 뒤에 [0]
형식으로 인덱스 번호를 지정하고 대입한다.
a[0] = 10; // 인덱스가 0인 칸에 10을 대입
a[1] = 20; // 인덱스가 1인 칸에 20을 대입
a[3] = 30; // 인덱스가 2인 칸에 30을 대입
즉, 아래와 같이 구성된다고 생각할 수 있다.
0 | 1 | 2 |
---|---|---|
10 | 20 | 30 |
배열에 저장된 값 사용하기
인덱스 번호를 사용한다는 점을 제외하고는 일반 변수의 사용과 동일하다.
a) 다른 변수에 복사하기
int k = a[0]; // k에 10이 복사된다.
b) 출력하기
System.out.println(a[1]); // 20이 출력됨
c) 연산하기
a[2] = a[0] * a[1]; // 인덱스가 2인 공간의 값이 200이 됨
3) 배열의 크기
배열이름.length는 배열의 칸수를 반환한다.
int[] a = new int[5]
System.out.println(a.length); // 5가 출력됨
배열의 인덱스는 항상
0
부터크기 -1
까지 1씩 증가하면서 존재한다.
4) 반복문을 통한 활용
인덱스가 0
부터 크기 -1
까지 증가한다는 특성을 활용하여 for문과 함께 사용하면 배열의 모든 원소에 대한 일괄 처리가 가능하다.
int a = new int[4];
for ( int i=0; i<a.length; i++) {
a[i] = i * 10;
System.out.println(a[i]);
}
선언 + 할당 + 값대입을 한 번에 일괄 처리 하기
배열을 할당할 때 사이즈를 지정하지 않고 중괄호 {}
를 열어서 배열의 원소값들을 직접 나열한다.
int[] a = new int{ 10, 20, 30, 40};
이 때 `new int[]` 생략할 수 있다.
int[] a = {10, 20, 30, 40};
ArraySum.java
배열의 모든 원소에 대한 합 구하기
public class ArraySum {
public static void main(String[] args) {
int[] data = {10, 20, 30, 40, 50};
// 총 합을 구할 때는 항상 누적 합산을 수행할 변수를 0으로 초기화 해 놓고 반복을 수행해야 한다.
int sum = 0;
// 배열의 모든 원소에 대한 반복문 구성
for (int i=0; i<data.length; i++) {
// i번째 원소를 sum에 누적 합산
sum += data[i];
}
System.out.println(sum);
}
}
출력결과
150
ArrayMax.java
배열의 원소 중에서 가장 큰 값 구하기
public class ArrayMax{
public static void main(String[] args) {
// 원소값을 무작위로 갖는 배열
int[] data = { 5, 2, 7, 9, 2};
// 비교를 위한 값 준비
int max = 0;
//배열의 원소 수 만큼 반복
for (int i =0; i <data.length; i++) {
System.out.printf("max=%d, data[%d]=%d\n", max, i, data[i]);
// max가 data의 i번째보다 작다면 i번재 원소를 max에 복사
if (max < data[i]) {
System.out.printf(">> max에 %d를 복사\n", data[i]);
max = data[i];
}
}
System.out.println("최대값= " + max);
}
}
출력결과
max=0, data[0]=5
>> max에 5를 복사
max=5, data[1]=2
max=5, data[2]=7
>> max에 7를 복사
max=7, data[3]=9
>> max에 9를 복사
max=9, data[4]=2
최대값= 9
ArrayConverse.java
public class ArrayConverse {
public static void main(String[] args) {
int[] data = { 1, 5, 2, 4, 3};
for (int i=0; i<data.length/2; i++) {
// 반대쪽 원소의 인덱스 구하기
int k = data.length -i -1;
// i번째 원소와 k번째 원소 교환
int tmp = data[i];
data[i] = data[k];
data[k] = tmp;
}
for (int i=0; i<data.length; i++) {
System.out.println(data[i]);
}
}
}
출력결과
3
4
2
5
1
정렬
for(int i=0; i<k.length-1; i++){
for (int j=i+1; j<k.lengthl k++)
}
'코딩 공부 > Java' 카테고리의 다른 글
[Java] 12_메서드 (0) | 2020.05.08 |
---|---|
[Java] 11_2차 배열 (0) | 2020.05.08 |
[Java] 09_형변환 (0) | 2020.05.08 |
[Java] 08_기본문법활용 (0) | 2020.05.08 |
[Java] 07_반복문 (0) | 2020.05.08 |