변수는 1개의 데이터만을 저장할 수 있다.
저장할 데이터의 수가 많아지면 많은 변수가 필요하고 코드도 길어진다.
그래서 많은 양의 데이터를 적은 코드로 쉽게 처리할 수 있는 배열에 대해 알아야 한다.
배열
같은 타입의 데이터를 연속된 공간에 나열하고, 각각의 데이터에 인덱스(index)를 부여해 놓은 자료구조이다.
예를 들어 student라는 배열이 있다고 하자.
student[] | B | C | E | F | H | K | L | R | T |
인덱스 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
각 인덱스(index)는 각 항목의 데이터를 읽거나 저장하는 데 사용되며 배열의 이름 옆에 대괄호[ ]에 기입이 된다.
인덱스는 0부터 시작한다.
student [0]은 B이고 student [5]는 K이다.
배열의 특징
1. 배열은 같은 타입의 데이터만 저장할 수 있다.
2. 한번 생성된 배열은 길이를 늘리거나 줄일 수 없다.
배열 선언
타입[ ] 변수; | 타입 변수[ ]; |
int [ ] array1;
|
int array1 [ ];
|
두 가지의 방식이 있다.
배열의 변수는 참조 변수에 속한다.
배열도 객체라서 힙 영역에 생성되고 배열 변수는 힙 영역의 배열 객체를 참조하게 된다.
참조할 배열 객체가 없다면 배열 변수는 null 값으로 초기화된다.
배열 생성
1. 값 목록이 있는 경우 배열 생성
타입 [ ] 변수 = { 값 0 , 값 1 , 값 2, 값 3,... };
int[] arr1 = { 1, 2, 3, 4, 5 };
2. new 연산자로 배열 생성
타입 [ ] 변수 = new 타입[길이];
public void test1() {
int[] arr = new int[5]; // arr[0] ~ arr[4] 변수가 생성완료
for (int i = 0; i < 5; i++) {
arr[i] = i + 1;
System.out.println(arr[i]);
}
int[] arr1 = { 1, 2, 3, 4, 5 };
for (int i = 0; i < 5; i++) {
System.out.println(arr1[i]);
}
}
같은 결과가 나온다.
배열 값의 초기화
아무 값도 입력을 하지 않은 경우를 이야기하는데 정수와 실수는 0 , boolean은 false, char는 '\u0000'이다.
public void test2() {
// 배열 값의 초기화
// -> 아무값도 입력하지 않고 배열을 선언하는 경우 자동적으로 기본값으로 초기화됨
// boolean : false
// char : ''
// 정수 / 실수 : 0
int[] arr = new int[5];
System.out.println(arr[0]);
System.out.println(arr[1]);
}
0
0
으로 출력이 된다.
분류 | 타입 | 초기값 |
기본 타입(정수) |
byte [ ] |
0 |
기본 타입(실수) | float[ ] double[ ] |
0.0F 0.0 |
기본 타입(논리) | boolean[ ] | flase |
참조 타입 | 클래스[ ] 인터페이스[ ] |
null null |
배열 길이
배열의 길이는 배열에 저장할 수 있는 전체 항목의 개수를 말한다. 코드에서 배열의 길이를 얻으려면
length 필드를 읽는다. 배열의 length 필드를 읽기 위해서는 배열 변수에 도트(.) 연산자를 붙이면 된다.
배열 변수.length;
public void test5() {
Scanner sc = new Scanner(System.in);
int arr[] = new int[5];
int sum = 0;
for (int i = 0; i < arr.length; i++) {
System.out.println((i + 1) + "번째 학생 성적 : ");
arr[i] = sc.nextInt();
sum += arr[i];
}
System.out.println("입력한 학생들의 성적");
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i] + " ");
}
System.out.println();
System.out.println("총 합계 : " + sum);
double avg = sum / 5.0;
System.out.println("평균 점수 : " + avg);
}
for문에서 배열의 길이까지 불러온 코드이다.
출력을 해보면 다음과 같은 결과가 나온다.
1번째 학생 성적 :
50
2번째 학생 성적 :
50
3번째 학생 성적 :
30
4번째 학생 성적 :
50
5번째 학생 성적 :
50
입력한 학생들의 성적
50
50
30
50
50
총합계 : 230
평균 점수 : 46.0
<실습>
(1) 모텔 입/퇴실 관리 프로그램
public void test6() {
Scanner sc = new Scanner(System.in);
boolean bool = true;
int[] room = new int[10];
// 배열 안의 값이 0이면 빈방
// 배열 안의 값이 1이면 사용중
while (bool) {
System.out.println("= = = = = 모텔 관리 프로그램 = = = = =");
System.out.println("1. 입실 2. 퇴실 3. 방 보기 4. 종료");
System.out.println("선택 > ");
int sel = sc.nextInt();
switch (sel) {
case 1: // 입실은 0인값을 -> 1로 변경하는 로직
System.out.print("몇번방에 입실하시겠습니까 ?");
int in = sc.nextInt();
// 길이가 10인 배열은 [0] ~ [9] // 사용자한테 입력받는 번호는 1 ~ 10
if (room[in - 1] == 1) {
System.out.println(in + " 번방에는 현재 손님이 있습니다.");
} else {
room[in - 1] = 1;
}
break;
case 2: // 퇴실은 1인값을 -> 0로 변경하는 로직
System.out.println("몇번방에서 퇴실하시겠습니까 ?");
int out = sc.nextInt();
if (room[out - 1] == 0) {
System.out.println(out + " 번방은 현재 비어있습니다.");
} else {
room[out - 1] = 0;
}
break;
case 3:
for (int i = 0; i < room.length; i++) {
if (room[i] == 0) {
System.out.println((i + 1) + " 번방에 현재 비어있습니다.");
} else {
System.out.println((i + 1) + " 번방에는 현재 손님이있습니다.");
}
}
break;
case 4:
bool = false; // 무한반복문 해제
break;
}
}
}
출력을 해보면 다음과 같은 결과가 나온다.
= = = = = 모텔 관리 프로그램 = = = = =
1. 입실 2. 퇴실 3. 방 보기 4. 종료
선택 >
3
1번 방에 현재 비어있습니다.
2번 방에 현재 비어있습니다.
3번 방에 현재 비어있습니다.
4번 방에 현재 비어있습니다.
5번 방에 현재 비어있습니다.
6번 방에 현재 비어있습니다.
7번 방에 현재 비어있습니다.
8번 방에 현재 비어있습니다.
9번 방에 현재 비어있습니다.
10번 방에 현재 비어있습니다.
= = = = = 모텔 관리 프로그램 = = = = =
1. 입실 2. 퇴실 3. 방 보기 4. 종료
선택 >
1
몇 번 방에 입실하시겠습니까? 6
= = = = = 모텔 관리 프로그램 = = = = =
1. 입실 2. 퇴실 3. 방 보기 4. 종료
선택 >
3
1번 방에 현재 비어있습니다.
2번 방에 현재 비어있습니다.
3번 방에 현재 비어있습니다.
4번 방에 현재 비어있습니다.
5번 방에 현재 비어있습니다.
6번 방에는 현재 손님이 있습니다.
7번 방에 현재 비어있습니다.
8번 방에 현재 비어있습니다.
9번 방에 현재 비어있습니다.
10번 방에 현재 비어있습니다.
= = = = = 모텔 관리 프로그램 = = = = =
1. 입실 2. 퇴실 3. 방 보기 4. 종료
선택 >
1
몇 번 방에 입실하시겠습니까? 6
6번 방에는 현재 손님이 있습니다.
= = = = = 모텔 관리 프로그램 = = = = =
1. 입실 2. 퇴실 3. 방 보기 4. 종료
선택 >
1
몇 번 방에 입실하시겠습니까? 4
= = = = = 모텔 관리 프로그램 = = = = =
1. 입실 2. 퇴실 3. 방 보기 4. 종료
선택 >
3
1번 방에 현재 비어있습니다.
2번 방에 현재 비어있습니다.
3번 방에 현재 비어있습니다.
4번 방에는 현재 손님이 있습니다.
5번 방에 현재 비어있습니다.
6번 방에는 현재 손님이 있습니다.
7번 방에 현재 비어있습니다.
8번 방에 현재 비어있습니다.
9번 방에 현재 비어있습니다.
10번 방에 현재 비어있습니다.
= = = = = 모텔 관리 프로그램 = = = = =
1. 입실 2. 퇴실 3. 방 보기 4. 종료
선택 >
2
몇 번 방에서 퇴실하시겠습니까?
4
= = = = = 모텔 관리 프로그램 = = = = =
1. 입실 2. 퇴실 3. 방 보기 4. 종료
선택 >
3
1번 방에 현재 비어있습니다.
2번 방에 현재 비어있습니다.
3번 방에 현재 비어있습니다.
4번 방에 현재 비어있습니다.
5번 방에 현재 비어있습니다.
6번 방에는 현재 손님이 있습니다.
7번 방에 현재 비어있습니다.
8번 방에 현재 비어있습니다.
9번 방에 현재 비어있습니다.
10번 방에 현재 비어있습니다.
= = = = = 모텔 관리 프로그램 = = = = =
1. 입실 2. 퇴실 3. 방 보기 4. 종료
선택 >
4
'이공계전문기술연수 > Java' 카테고리의 다른 글
<이공계전문기술연수> 16. Java 객체지향프로그래밍(OOP) 클래스 (0) | 2019.08.16 |
---|---|
<이공계전문기술연수> 15. Java 배열(2) (복사/버블정렬/로또/다차원) (0) | 2019.08.15 |
<이공계전문기술연수> 13. 참조 타입 / 참조 변수 (0) | 2019.08.15 |
<이공계전문기술연수> 12. Java 반복문: while문 / break문 (0) | 2019.08.13 |
<이공계전문기술연수> 11. Java 반복문: for문 // Math.random() (0) | 2019.08.13 |