배열이란?
“배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것”(연속적으로 저장되어있음)
int[ ] score = new int[5];
-> int값 5개를 저장할 수 있는 score이라는 이름의 배열을 새로 만든다! (이름이 아니라 배열의 인덱스로! 0부터~)
-> 참조 변수를 통해서 인덱스에 접근(score[0])
배열의 선언과 생성
배열의 선언: 배열을 다루기 위한 참조변수 언어
선언방법 | 선언 예 |
타입 [ ] 변수이름: (Java 스타일) | int[ ] score; |
string[ ] name; | |
타입 변수이름[ ]; (C언어) | int score[ ]; |
string name[ ]; |
배열을 생성: 실제 저장공간을 생성
변수이름 = new 타입[길이];
int[ ] score; // int타입의 배열을 다루기 위한 참조변수 score선언
score = new int[5] // int타입의 값 5개를 저장할 수 있는 배열 생성
배열의 인덱스
배열의 인덱스 -> 각 요소(자동 공간)에 작동으로 붙는 번호(일련번호)
“인덱스(index)의 범위는 0부터 ‘배열길이-1’까지”(0부터 시작하기 때문)"
//int[] score; //1. 배열 score를 선언(참조변수)
//score = new int[5]; //2. 배열의 생성(int저장공간 *5)
int[] score = new int[5]; // 배열의 선언과 생성을 동시에
score[3] = 100;
int value = score[3];
System.out.println("score[3]: " + value); //score[3]: 100
배열의 길이
배열이름.length – 배열의 길이(int형 상수)
“배열은 한 번 생성하면 그 길이를 바꿀 수 없다.”(실행동안)
int[] arr = new int[5];
int tmp = arr.length;
System.out.println("arr.length: " + tmp); //arr.length: 5
int[] score = new int[5];
for(int i=0; i<score.length; i++) {
System.out.println(score[i]);
}
배열의 초기화
배열의 각 요소에 처음으로 값을 저장하는 것
int[] score = new int[] {50,60,70,80,90}; //1번
int[] score1 = {50,60,70,80,90}; //2번 new int[ ]를 생략할 수 있음
// int[] score;
// score = {50,60,70,80,90} //에러. new int[]를 생략할 수 없음(두줄 xx)
배열의 출력
-> Arrays 클래스는 배열을 다루는데 필요한 메소드 제공
System.out.println(Arrays.toString(iArr)); -> [100, 95, 80, 70, 60] Array의 내용을 문자열로 반환
int[] iArr = {100, 95, 80, 70, 60}; //배열을 가리키는 참조변수 iArr의 값을 출력한다.
System.out.println(iArr); //[I@6504e3b2 출력
char[] chArr = {'A','B','C','D'};
System.out.println(chArr); //ABCD 출력(캐릭터 배열일 때만)
for(int i=0;i<iArr.length;i++) {
System.out.println(iArr[i]); //배열의 요소를 순서대로 하나씩 모든 요소를 출력
}
배열의 활용(1)
예제1) 배열의 모든 요소를 더해서 총합과 평균 구하기
int sum = 0; //총합을 저장하기 위한 변수
float avg = 0f; //평균을 저장하기 위한 변수
int [] score = {100, 88, 100, 100, 90};
for(int i=0; i<score.length; i++) {
sum += score[i]; //반복문을 이용해서 배열에 저장되어 있는 값 더하기
}
avg = sum / (float)score.length; //계산결과를 float타입으로 얻으려 형변환
System.out.printf("총합:%d, 평균:%.1f ", sum, avg);
예제2) 배열의 요소 중에서 제일 큰 값과 제일 작은 값 찾기
int [] score = {79, 88, 91, 33, 100, 55, 95};
int max = score[0], min = score[0]; //배열의 첫 번째 값으로 최대값, 최소값 초기화
for(int i=1; i<score.length; i++) { //배열의 두 번째 요소부터 읽기 위해서 변수 i의 값을 1로 초기화
if(score[i] > max) {
max = score[i];
}else if(score[i] < min) {
min = score[i];
}
} // end of for
System.out.printf("최대값: %d, 최소값 %d", max, min);
예제3) 배열의 요소의 순서를 반복해서 바꾼다.(숫자 섞기, 로또번호 생성)
int[] numArr = {0,1,2,3,4,5,6,7,8,9};
System.out.println(Arrays.toString(numArr));
for(int i=0; i<numArr.length; i++) {
int n = (int)(Math.random()*10); // 0 ~ 9 중의 한 값을 임의로 얻기
int tmp = numArr[0]; //numArr[0]과 numArr[n]의 값을 서로 바꾸기
numArr[0] = numArr[n];
numArr[n] = tmp;
}
System.out.println(Arrays.toString(numArr));
임의의 요소를 생성해서 바꾸는 것의 개념
예제4) 1~45까지의 정수가 들어있는 배열 ball을 만든 뒤의 처음부터 6번째 요소까지 난수 생성!
(출력 값)
ball[0]=22
ball[1]=5
ball[2]=24
ball[3]=11
ball[4]=30
ball[5]=13
int[] ball = new int[45]; //45개의 정수값을 저장하기(0~44)
// 배열의 각 요소에 1~45의 값을 저장한다.
for(int i=0; i<ball.length;i++)
ball[i] = i+1; //ball[0]에 1부터 45까지 저장
int tmp = 0; // 두 값을 바꾸는데 사용할 임시변수
int j = 0; // 임의의 값을 얻어서 저장할 변수
// 배열의 i번째 요소와 임의의 요소에 저장된 값을 서로 바꿔서 값을 섞기
// 0번째부터 5번째 요소까지 모두 6개만 바꾼다.
for(int i=0; i<6; i++) {
j = (int)(Math.random()*45); // 0~44범위의 임의의 수
tmp = ball[i];
ball[i] = ball[j];
ball[j] = tmp;
}
//배열 ball의 앞에서부터 6개의 요소를 출력
for(int i=0; i< 6; i++)
System.out.printf("ball[%d]=%d%n",i,ball[i]);
'멀티캠퍼스 풀스택 과정 > Java의 정석' 카테고리의 다른 글
자바의정석2-1 객체지향의 개념 (0) | 2021.12.30 |
---|---|
자바의 정석1-8 배열들(String, 2차원)과 클래스(String, Arrays) (0) | 2021.12.30 |
자바의 정석1-6 반복문 (0) | 2021.12.29 |
자바의정석1-5 조건문 (0) | 2021.12.29 |
자바의 정석1-4 타입 변환과 연산자(operator) (0) | 2021.12.28 |