[Java] 배열
2021. 1. 19. 17:51ㆍDev.Program/Java & Spring
728x90
======== 저번시간 이어서 Ex5.java 만들기
EXIT_FOR_I: // LABEL(레이블) - i에 대한 반복문(for문)에 적용되는 레이블
for(int i = 1; i < 10; i++) {
// if(i == 5) {
//// break; // i가 5일 때 바깥쪽 for문을 빠져나감
// continue; // i가 5일 때 아래쪽 문장을 생략, 다음 반복 i++로 이동
// }
System.out.println("i = " + i);
EXIT_FOR_J: // LABEL(레이블)- j에 대한 반복문(for문)에 적용되는 레이블
for(int j = 1; j < 10; j++) {
// if(i == 5) {
// break; // i가 5일 때 안쪽 for문을 빠져나감
// continue; // i=5일때 아래쪽 문장생략, 다음반복 j++로 이동
// // 바로 위 break와 결과는 같지만
// // break는 빠져나가는거고 continue는 계속 실행하는거
// }
if(j == 5) {
// break; // j가 5일 때 안쪽 for문을 빠져나감
// (j가 1 ~ 4 일 때만 실행)
// continue; // j가 5일 때 출력을 생략함
// (j가 1 ~ 4, 6 ~ 9 일 때 실행)
// 레이블을 적용한 break 와 continue
// break EXIT_FOR_I;
// 레이블이 적용된 바깥쪽 for문을 빠져나감
continue EXIT_FOR_I;
// 레이블이 적용된 바깥쪽 for문 다음 반복 실행
}
System.out.println("------- j = " + j);
}
System.out.println("안쪽 for문 종료!");
}
System.out.println("바깥쪽 for문 종료!");
- 레이블! 띄어쓰기 하고 ctrl + space
- 레이블을 이용하면 반복문이 많을 때 특정 반복문으로 돌아갈 수 있다.
- if문 속 continue → 레이블을 따라서 바깥쪽으로 나감(i++로)
======== Ex6.java
문제 ) 다음과 같이 출력
12345
1234
123
12
1
for(int i = 5; i >= 1; i--) {
for(int j = 1; j <= i; j++) {
System.out.print(j + " ");
}
System.out.println();
}
- 답
54321
5432
543
54
5
for(int i = 1; i <= 5 ; i++) {
for(int j = 5; j >= i; j--) {
System.out.print(j + " ");
}
System.out.println();
}
- 답
*****
****
***
**
*
for(int i = 5; i >= 1; i--) {
for(int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}
- 위의 문장에서 * 로 바꾸기만 하면 됨.
- 이렇게 모를 땐 숫자 먼저 찍어보고 * 찍기
======== Ex.java 만들기
p.141
< 배열(Array) >
- 같은 타입의 여러 데이터를 하나의 묶음으로 다루는 것
- = 동일한 데이터타입 변수들의 집합
- 배열은 메모리 상의 연속된 공간에 생성됨
- ⇒ 따라서, 한 번 생성한 배열의 크기를 변경할 수 없다!
- 기본 데이터타입과 참조 데이터타입 모두를 배열로 생성 가능
- 저장된 데이터들은 배열명(변수명)을 사용하여 관리
- 배열의 크기는 배열명.length 속성을 사용하여 알아낼 수 있다
- 배열 생성 시 각 데이터 저장공간에는 인덱스(첨자)라는 번호가 붙는다
- ⇒ 인덱스 번호는 0부터 시작함!
- (따라서, 배열의 인덱스 범위는 0 ~ 배열크기-1 까지 자동 부여됨)
- 배열을 사용하려면 배열 선언 → 생성 → 초기화 단계를 거쳐야한다!
- (단, 배열을 생성하면 기본값으로 자동 초기화 일어남)
- ⇒ 기본값 : byte & short & int = 0, long = 0L, float = 0.0f, double = 0.0
- boolean = false, char = '\u0000' 또는 0
- 참조형(String 등)은 기본값은 무조건 null
< 배열 선언 기본 문법 >
데이터타입[] 변수명;
- 단, 배열 선언만 했을 경우 데이터 저장 불가! (배열 생성 전이므로)
- 배열이 생성된 주소값을 저장하는 변수 선언
< 배열 생성 기본 문법 >
변수명 = new 데이터타입[배열크기];
- 메모리(Heap)에 실제 데이터 저장이 가능하도록 공간을 할당받음
< 배열 초기화 기본 문법 >
변수명[인덱스] = 데이터;
< 배열 선언 및 생성을 동시에 수행하는 문법 >
데이터타입[] 변수명 = new 데이터타입[배열크기];
< 배열 선언 및 생성, 초기화를 동시에 수행하는 문법 >
데이터타입[] 변수명 = {데이터1, 데이터2, ..., 데이터n};
- 배열 크기를 지정하지 않아도 데이터 개수 만큼의 배열이 자동으로 생성됨
- (단, 배열 내의 데이터가 모두 준비된 경우에만 가능한 문법)
- int[] score = new int[5]; 이렇게 붙일 수도 있음.
for(int i = 0; i < score.length; i++) {
// 0 ~ 배열크기-1(4) 까지 반복 ⇒ 유동적
System.out.println(i + "번 배열 : " + score[i]);
}
- ⇒ 배열의 첫번째 인덱스(0번)부터 마지막 인덱스(배열크기-1)까지 반복
- 가급적 배열명.length 를 사용하여 코드 변경에 대처가 가능하도록 하자!
======== Test.java 만들기
문제 )
정수 10개를 저장하는 배열 arr 생성하고
1 ~ 10 까지 초기화 한 후 출력
int[] arr = new int[10];
arr[0] = 1; arr[1] = 2; arr[2] = 3; arr[3] = 4; arr[4] = 5;
arr[5] = 6; arr[6] = 7; arr[7] = 8; arr[8] = 9; arr[9] = 10;
for(int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
문제 ) 배열 10개에 저장된 정수의 합을 계산하여 출력
int sum = 0;
for(int i = 0; i < arr.length; i++) {
// 모든 정수의 합을 누적
sum += arr[i]; // i번 배열 데이터를 꺼내서 변수 sum 에 누적
}
System.out.println("합 : " + sum);
문제 )
학생 5명의 점수를 배열(score)에 저장하고
총점(total)과 평균(avg)을 계산하여 점수와 함께 출력
< Ex.java >
- C언어 쓰던 사람은 아래 줄 처럼 뒤에 []를 붙이는 습관이 있음
- 저렇게 쓸 경우 문제 되는 점!
- 다른 언어였다면 Heap 에 남아있는 4,5,6 값을 직접 지워야 되는데 자바는 Garbage Collector = GC가 자동으로 지운다.
- 참조하는 값이 하나라도 있으면 제거대상이 아님.
> 추가
System.out.println(score[10]);
⇒ 0 ~ 4 까지 범위를 벗어나는 인덱스 지정
- 배열 인덱스를 잘못 지정했을 경우(존재하지 않는 인덱스를 참조하는 경우)
- 프로그램이 정상적으로 실행되지 못하고 중간에 종료됨
- 단, 코드 상에서 즉시 오류 확인이 불가능(컴파일 오류가 발생하지 않음)
- ⇒ 프로그램 실행 시점에서 오류가 발견되므로 인덱스 사용 시 주의!
- Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10 at Ex.main(Ex.java:84)
- ⇒ 배열 범위를 벗어난 인덱스를 사용했을 때 오류 발생(10번 때문에 오류)
- ⇒ 오류가 발생한 코드의 위치는 Ex.java 클래스의 84번 라인
728x90
'Dev.Program > Java & Spring' 카테고리의 다른 글
[Java] 메서드(Method) (0) | 2021.01.19 |
---|---|
[Java] 2차원배열 (0) | 2021.01.19 |
[Java] while문 / do~while문 / break / continue (0) | 2021.01.19 |
[Java] switch~case문 / 반복문 / for문 (0) | 2021.01.14 |
[Java] 조건문 / if문 / if~else문 / 중첩if문 (0) | 2021.01.14 |