본문 바로가기
멀티캠퍼스 풀스택 과정/Java의 정석

자바의 정석1-7 배열

by 이쟝 2021. 12. 30.

배열이란?

배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것”(연속적으로 저장되어있음)

int[ ] score = new int[5];

-> int5개를 저장할 수 있는 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));

 

더보기
더보기

-> 배열을 섞는 방법은 임의의 두 요소의 값을 서로 바꾸면 됨!

-> 처음부터 중복된 값이 없으면 중복이 안 생김!

 


임의의 요소를 생성해서 바꾸는 것의 개념

 

random값이 n에 3이 나왔다고 가정해서 numArr[n] -&gt; numArr[3]


예제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]);