버글버글
Java 수업 기록 (8) 배열(Array) 본문
- ARRAY -
▶ 배열(Array)
1. 데이터를 연속된 공간에 나열하고 각 데이터에 인덱스(index)를 부여한 자료 구조
2. 같은 타입의 데이터만 저장할 수 있다.
3. 배열의 길이는 늘리거나 줄일 수 없다.
배열 | h | e | l | l | o |
인덱스 | 0 | 1 | 2 | 3 | 4 |
▶ 1차원배열(one dimension)
1. 여러 개의 변수를 하나의 이름으로 관리하는 자료 구조
2. 배열의 구성요소
1) 인덱스 : 각 변수의 위치 정보. 0으로 시작
2) 배열명 : 모든 변수를 관리하는 하나의 이름
3. 각 변수는 배열명에 대괄호[] (브라켓:bracket)와 인덱스를 붙여서 구분
* 배열 선언 및 생성 (변수는 선언만 하면 사용이 가능, 배열은 선언을 한 뒤, 생성도 해야 함)
1. 배열 선언
int[] arr;
int arr[];
// 같은 내용임
java에서는 첫번째 방식을 추천 한다.
2. 배열 생성 (몇 개의 변수를 관리 할 것인지)
arr = new int[3];
// 길이가 3줄짜리 배열을 만들겠다.
3. 배열 선언 및 생성
int[] arr = new int[3];
* 3.은 1.과 2. 를 한번에 실행하는 코드이다.
*배열 요소
1. 배열로 관리되는 각각의 변수
2. 모든 배열 요소의 호출
arr[0] // 1번째 요소
arr[1] // 2번째 요소
arr[2] // 3번째 요소
3. 배열 요소는 자동으로 초기화가 된다 (어떤 값을 가진다.)
- 값이 없음을 의미하는 0, 0.0, false, null 값을 가진다.
- 값이 없다라는것은 거짓이다.
* 배열의 장점
- 변수 3개가 있는 상황 가정
- 아래의 상황만 이해하면 배열은 다 이해한것이다..
// 일반 변수 예시
int a, b, c;
System.out.println(a);
System.out.println(b);
System.out.println(c);
// 배열 예시
int[] arr = new int[3];
for(int i = 0; i < 3; i++) {
System.out.println(arr[i]);
예시)
int[] arr = new int[3];
for(int i = 0; i < 3; i++) {
System.out.println(arr[i]);
}
// i를 (index)변수 이름으로 우선사용 후 > j > k
// 선언만 하고 초기값 지정을 안했기 때문에 사실상 오류가 나야하는 코드지만
// 배열은 자동으로 초기화가 되기 때문에 값이 있다고 본다.
예시 2) 학생 3명의 점수라고 가정
arr[0] = 100;
arr[1] = 50;
arr[2] = 80;
for(int i =0; i < 3; i++) {
System.out.println(arr[i]);
- 학생 3명의 평균은?
int total = 0;
for(int i = 0; i < 3; i++) {
total += arr[i];
// 캐스팅 1번 방법
double average = (double)total / 3;
System.out.println("평균 : " + average + "점");
// 캐스팅 2번 방법
double average2 = total / 3.0;
System.out.println("평균 : " + average2 + "점");
int[] arr = new int[3];
- 3에 관련된건 종속되어있는 것임.
- 배열의 길이라는 의미의 arr.length를 쓴다.
arr[0] = 100;
arr[1] = 50;
arr[2] = 80;
for(int i =0; i < arr.length; i++) {
System.out.println(arr[i]);
}
int total = 0;
for(int i = 0; i < arr.length; i++) {
total += arr[i];
}
double average = (double)total / arr.length;
System.out.println("평균 : " + average + "점");
* 사실 배열은 나중에 가면 사용을 안하기는 한다. . . 실무에서 많이 출현하진 않는다.
- 배열을 대체 할 수 있는 수단은 많다.
* 배열의 초기화
// int[] arr = new int[5]; // 배열을 생성한것이지 초기화 한것은 아니다.
// int[] arr = new int[] {10, 20, 30, 40, 50}; // 이런식으로 초기화 하지만, 아래처럼 사용된다.
int[] arr = {10, 20, 30, 40, 50};
int[] arr = {10, 20, 30, 40, 50};
int max = 0;
int min = 100; // 최소값의 초기값은 0 을 주면 안된다. 0과 비교를 하기 때문에
for(int i = 0; i < arr.length; i++) {
if(max < arr[i]) {
max = arr[i];
}
if(min > arr[i]) {
min = arr[i];
}
}
System.out.println("최대 : " + max);
System.out.println("최소 : " + min);
int max = arr[0];
int min = arr[0];
for(int i = 1; i < arr.length; i++) {
if(max < arr[i]) {
max = arr[i];
}
if(min > arr[i]) {
min = arr[i];
}
}
System.out.println("최대 : " + max);
System.out.println("최소 : " + min);
* 기본 알고리즘
* 배열의 데이터타입
int[] : 참조 타입(Reference Type)
* 배열의 길이 늘리기
1. 배열의 길이는 변경할 수 없다.
2. 늘어난 길이의 새로운 배열을 만들고,
기존 배열의 값을 모두 새로운 배열로 옮기고,
기존 배열의 참조값을 새로운 배열의 참조값으로 수정한다.
int[] arr = {1, 2, 3, 4, 5};
// 늘어난 길이의 새로운 배열을 만들고,
int[] temp = new int[1000];
// 기존 배열의 값을 모두 새로운 배열로 옮기고,
System.arraycopy(arr, 0, temp, 0, arr.length);
// arr 0번을 temp 0번으로 옮기는게 시작이다. 언제까지? arr.length 까지
// 기존 배열의 참조값을 새로운 배열의 참조값으로 수정한다.
arr = temp;
// 이제 arr 배열의 길이는 1000이다.
System.out.println(arr.length);
// arr을 출력하는 방법
System.out.println(Arrays.toString(arr));
* Advenced_for(발전된 for문)
예시) 일반 for문
public static void main(String[] args) {
String[] friends = {"라이언", "프로도", "어피치"};
// 일반 for문
for(int i = 0; i < friends.length; i++) {
// 배열 for에서 이 값을 고정 값이라고 봐도 된다.
System.out.println((i +1) + "번째 친구 - " + friends[i]);
}
// 각 배열이름 = friends / 배열의 인덱스 [i]
}
예시) 향상된 for문
public static void main(String[] args) {
String[] friends = {"라이언", "프로도", "어피치"};
for(String friend : friends) {
System.out.println(friend);
}
// friends 배열의 모든 요소를 하나씩 String friend로 옮긴다.
}
▶ 2차원배열(twe dimension)
1. 1차원배열을 여러 개 관리하는 자료 구조
2. 1차원배열들의 길이는 서로 다를 수 있음
* 2차원 배열의 선언 및 생성
1. 1차원배열의 선언
public static void main(String[] args) {
int[][] arr;
}
2. 2차원배열의 생성
public static void main(String[] args) {
// 1번째 예시
arr = new int[3][2];
// 의미 : 3행 2열의 구조 (김밥 3줄, 각 2개씩)
// 2번째 예시
arr = new int[3][];
// 의미 : 3행 n열의 구조 (김밥 3줄, 모두 다르게 조각)
arr[0] = new int[5]; // 의미 : 1번째 1차원 배열(1번째 김밥은 5개 조각)
arr[1] = new int[3]; // 의미 : 2번쨰 1차원 배열(2번째 김밥은 3개 조각)
arr[2] = new int[8]; // 의미 : 3번쨰 1차원 배열(3번째 김밥은 8개 조각)
}
* 2차원 배열의 요소
1. 인덱스를 2개를 사용
몇 번째 1차원배열인가? 해당 배열의 몇 번째 요소인가?
2. 2차원배열이 관리하는 1차원배열
public static void main(String[] args) {
arr[0]
arr[1]
arr[2]
}
3. 각각의 1차원배열이 관리하는 배열 요소
public static void main(String[] args) {
arr[0][0], arr[0][1]
arr[1][0], arr[1][1]
arr[2][0], arr[2][1]
}
예시) 3행 2열 2차원 배열
public static void main(String[] args) {
int[][] arr1 = new int[3][2];
for(int i = 0; i < arr1.length; i++) {
for(int j = 0; j < arr1[i].length; j++) {
System.out.print(arr1[i][j] + "\t");
}
System.out.println();
}
}
예시) 3행 n열 2차원 배열
public static void main(String[] args) {
int[][] arr2 = new int[3][];
arr2[0] = new int[5]; // 1번째 1차원배열의 길이는 5
arr2[1] = new int[4]; // 2번째 1차원배열의 길이는 4
arr2[2] = new int[8]; // 3번째 1차원배열의 길이는 8
for(int i = 0; i < arr2.length; i++) {
for(int j = 0; j < arr2[i].length; j++) {
System.out.print(arr2[i][j] + "\t");
}
System.out.println();
}
}
* Advenced_for(발전된 for문)
예시) 일반 for문
public static void main(String[] args) {
for(int i = 0; i < timeTable.length; i++) {
for(int j = 0; j < timeTable[i].length; j++) {
System.out.print(timeTable[i][j] + " ");
}
System.out.println();
}
}
예시) 향상된 for문
public static void main(String[] args) {
for(String[]weekName : timeTable) {
for(String course : weekName) {
System.out.print(course + " ");
}
System.out.println();
}
'java > java 수업 기록' 카테고리의 다른 글
Java 수업 기록 (10) 상속 (0) | 2022.08.01 |
---|---|
Java 수업 기록 (9) 클래스(Class), 객체, 메소드, 접근제어자 (0) | 2022.07.29 |
Java 수업 기록 (7) Java API - Scanner (0) | 2022.07.27 |
Java 수업 기록 (6) Java API - String(문자열) (0) | 2022.07.25 |
Java 수업 기록 (5) Java API - 난수, timestamp 등 (0) | 2022.07.23 |