반응형
배열
같은 자료형의 변수들을 하나의 묶음으로 다루는 것
배열은 저장된 값마다 인덱스 번호가 부여됨(0부터 시작)
1 . 배열의 사용 이유
- 배열을 사용하지 않는다면 연속 된 메모리 공간으로 관리할 수 없고, 반복문을 이용한 연속적인 처리가 불가능하기 때문에 배열을 사용한다.
2 . 배열의 선언과 할당
배열 선언 | 배열 할당 | 배열 선언과 할당 |
자료형[] 배열명; 자료형 배열명 []; |
배열명 = new 자료형[배열크기]; | 자료형[] 배열명 = new 자료형[배열크기]; 자료형 배열명[] = new 자료형[배열크기]; |
3. 배열 저장구조
- 자료형[] 배열명; stack에 배열의 주소를 보관할 수 있는 공간
- new 자료형[배열크기]; heap 영역에 공간을 할당하고 발생한 주소값을 반환하는 연산자
- 발생한 주소를 레퍼런스 변수(참조형 변수)에 저장하고 이것을 참조하여 사용하기 때문에 참조 자료형(reference type)이라고 한다.
- heap영역은 값이 없는 공간이 존재 할 수 없으므로 처음 배열 선언 시 자료형별 기본값으로 초기화 된다. ex) int 0, double 0.0, String null, boolean false, char \u0000
배열의 사용 방법
1 . 배열 초기화 방법
(1) 인덱스를 이용한 초기화
int[] arr = new int[3]
arr[0] = 1;
arr[1] = 5;
arr[2] = 2;
for(int i = 0; i < arr9.length; i++) {
System.out.print(arr9(i));
} length는 배열의 길이를 알 수있는 필드이다.(String의 length()와는 다름)
(2) for문을 이용한 초기화
for(int i = 0; i < arr.length; i++){
arr[i] = i;
}
Index가 순차적저으로 증가함에 따라 초기화 할 리터럴 값이 규칙적이라면
반복문을 통해 배열 초기화 가능
(3) 선언과 동시에 초기화
int[] arr = {1, 2, 3, 4, 5};
int[] arr = new int[]{1, 2, 3, 4, 5};
String fruit[] = {"사과", "포도", "참외"};
2 . 초기화 된 값 출력
public static void main(String[] args)
int[] arr = {1,2,3,4,5};
System.out.println(arr)
◆ 실행 결과
[I@4361bd48
위와 같이 배열 변수를 출력하면 주소값이 나오기 때문에
for문을 사용하여 배열의 값을 출력해주어야 한다.
(문자형은 char[]chArr ={a, b, c}; System.out.print(chArr); 로 출력 가능하다)
◎ for문을 사용하여 출력하기
int[] arr = {1, 2, 3, 4, 5};
for(int i = 0; i < arr.length; i++){
System.out.print(arr[i]);
}
◆ 실행 결과
12345
3 . 배열 사용시 주의사항
- 배열을 할당할 시에는 반드시 배열의 크기를 지정해 주어야 한다.
int[] iarr = new int[5];
(x) int[] iarr = new int[]; 크기를 지정해 주지 않으면 에러 발생
- 한 번 지정한 배열의 크기는 변경하지 못한다.
- 한 번 할당된 배열을 지울 수 없지만 레퍼런스 변수를 null로 변경하면, 더 이상 주소가 참조되지 않은 배열은 일정 시간이 지난 후 heap의 old영역으로 이동하여 GC(가비지컬렉터)가 삭제시킨다. 한 번 찾아갈 수 있는 주소 값을 잃어버린 배열은 다시 참조 불가능하다. 아무것도 참조하지 않고 null이라는 특수한 값을 참조하고 있는 경우 참조 연산자를 사용하게 될때 java.lang.NullPointerException가 발행한다.
배열을 이용한 예제
반응형
- 5명의 자바 점수를 정수로 입력 받아서 합계와 평균을 실수로 구하는 프로그램을 만들어보자
1. 5명 자바 점수를 저장할 배열 할당
int[]scores = new int[5]
Scannerr sc = new Scanner(system.in);
2. 반복문을 이용하여 배열 인덱스에 하나씩 접근해서 점수를 입력 받기
배열의 인덱스 범위를 넘어가는 호출을 했을 경우ArrayIndexOutOfBoundsException 발생하니 주의!
for(int i = 0; i < scores.length; i++){
System.out.print((i+1) + "번째 학생의 자바 점수를 입력해주세요 : ");
scores[i] = sc.nextInt();
}
3. 합계와 평균 구하기
double sum = 0.0;
double avg = 0.0;
4. 합계는 모든 인덱스의 값을 sum변수에 누적해서 담아주기
for(int i = 0; i < scores.length; i++){
sum += scores[i];
}
5. 평균은 합계를 구한 값에서 배열의 길이(숫자)를 나누기
avg = sum / scores.length;
System.out.println("sum : " + sum);
System.out.println("avg : " + avg);
◇ 실행 결과
1번째 학생의 자바 점수를 입력해주세요 : 50
2번째 학생의 자바 점수를 입력해주세요 : 10
3번째 학생의 자바 점수를 입력해주세요 : 80
4번째 학생의 자바 점수를 입력해주세요 : 100
5번째 학생의 자바 점수를 입력해주세요 : 38
sum : 278.0
avg : 55.6
- 랜덤한 카드를 한 장 뽑아서 출력해보자
1. 모양과 카드 숫자별로 값을 저장할 두 종류의 배열을 만들기
String[] shapes = {"SPADE", "CLOVER", "HEART", "DIAMOND"};
String[] cardNumbers = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "JACK", "QUEEN", "KING", "ACE"};
2. 배열 인덱스 범위의 난수 발생
int randomShapeIndex = (int)(Math.random() * shapes.length);
int randomCardNumberIndex = (int)(Math.random() * cardNumbers.length);
3. index를 이용해 출력하기
System.out.println("당신이 뽑은 카드는 " + shapes[randomShapeIndex] + " "
+ cardNumbers[randomCardNumberIndex] + " 카드입니다.");
◇ 실행 결과
당신이 뽑은 카드는 DIAMOND 7 카드입니다.
반응형
'프로그래밍 > java' 카테고리의 다른 글
[자바JAVA] 배열의 정렬(오름차순으로 정렬하기, 중복 값 제거하기) (0) | 2022.07.07 |
---|---|
[자바JAVA] 다차원 배열 (2차원 배열) & 얇은복사와 깊은복사 (0) | 2022.07.07 |
[자바JAVA] 제어문 _ 조건문(if문과 switch문) (0) | 2022.07.05 |
[자바JAVA] API (절대값, 최소값, 최대값, 원주율, 난수, nextInt 활용) (0) | 2022.07.04 |
[자바JAVA] 패키지 (package) & 임포트 (import) (0) | 2022.07.04 |