배열이란, 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것이다.
// 길이가 100인 int 배열 선언, 생성
int[] array = new int[100];
int[] array = new int[5]
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
for문의 조건식에 배열의 길이를 직접 적는 것보다 배열이름.length를 사용하는 것이 좋다.
- ArrayIndexOutOfBoundsException 예외가 발생하기 쉽다.
- 배열의 길이가 변경되면 for문의 조건식을 변경해주어야 한다.
int[] array = new int[]{50, 60, 70, 80, 90};
int[] array = {50, 60, 70, 80, 90};
Arrays.toString(배열이름)
int[] array = {100, 95, 80, 70, 60};
// 1. for문을 이용한 배열의 출력
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]); // [100, 95, 80, 70, 60]
}
// 2. Arrays.toString(배열이름) 메서드 이용
System.out.println(Arrays.toString(array)); // [100, 95, 80, 70, 60]
// 잘못된 코드: 배열을 가리키는 참조변수 arr의 값을 출력한다.
System.out.println(array); // I@14318bb
int [] char_array = {'a', 'b', 'c', 'd'}
// char 배열은 다른 배열과 달리 for문을 사용하지 않고도 println()으로 각 요소를 그대로 출력한다.
System.out.println(char_array); // abcd
// 배열 arr 복사하기
int[] arr = new int[5]
// 1. 복사하려는 배열보다 길이가 2배인 배열을 생성한다.
int[] tmp = new int[arr.length*2];
// 2. for문으로 배열 arr의 값을 하나씩 배열 tmp에 복사한다.
for (int i = 0; i < arr.length; i++) {
tmp[i] = arr[i];
}
// 3. 참조변수 arr에 참조변수 tmp의 값을 저장한다.
arr = tmp;
/*
참고: arr은 tmp를 가리키게 되면서 그 전에 arr이 가리키던 배열은 사용할 수 없게 된다.
이렇게 쓸모없게 된 배열은 가비지 컬렉터에 의해 메모리에서 제거된다.
*/
배열의 복사는 for문보다
System.arraycopy()
를 사용하는 것이 효율적이다.
int[] arr = new int[5]
// '배열 arr'의 '0번째' 요소에서 '배열 newArr'의 '0번째' 요소로 'arr.length개'의 값을 복사한다.
System.arraycopy(arr, 0, newArr, 0, arr.length);
public class ArrayEx5 {
public static void main(String[] args) {
int[] score = {100, 88, 100, 100, 90};
// 총합, 평균 초기화
int sum = 0;
float average = 0f;
// 총합 구하기
for (int i = 0; i < score.length; i++) {
sum += score[i]
}
// 평균 구하기
average = sum / (float)score.length
}
}
/*
실행 결과
sum: 478
average: 95.6 (소수점까지 구하기 위하여 float로 변환)
*/
public class ArrayEx6 {
public static void main(String[] args) {
int[] score = {100, 88, 91, 55, 90};
// 최댓값, 최솟값 초기화
int max = score[0];
int min = score[0];
// 최댓값, 최솟값 구하기
for (int i = 1; i < score.length; i++) {
if (score[i] > max) {
max = score[i];
}
else if (score [i] < min) {
min = score[i]
}
}
}
}
// 카드 섞기
public class ArrayEx7 {
public static void main(String[] args) {
// 카드 숫자 배열 생성
int[] cardNum = new int[10];
// 카드 숫자 배열을 0~9로 초기화
for (int i = 0; i < cardNum.length; i++) {
cardNum[i] = i;
}
// 섞기 (임의의 카드 두 장을 카드 숫자 개수만큼 바꾸기)
for (int i = 0; i < cardNum.length; i++) {
// 0~9 중 임의의 숫자 n 구하기
int n = (int)(Math.random() * 10);
// cardNum[i]과 cardNum[n]을 바꾼다.
int tmp = cardNum[i];
cardNum[i] = cardNum[n];
cardNum[n] = tmp;
}
}
}
// 로또 번호 생성기
public class ArrayEx8 {
public static void main(String[] args) {
// 로또 번호 배열 생성
int[] ball = new int[45];
// 로또 번호 배열을 1~45로 초기화
for (int i = 0; i < ball.length; i++) {
ball[i] = i + 1;
}
// 섞기 (임의의 공 두 개를 6번 바꾸기)
for (int i = 0; i < 6; i++) {
// 0~44 중 임의의 숫자 j 구하기
int j = (int)(Math.random() * 45);
// ball[i]과 ball[j]을 바꾼다.
int tmp = ball[i];
ball[i] = ball[j];
ball[j] = tmp;
}
}
}
// 주사위를 10번 던져서 나올 경우의 수
public class ArrayEx9 {
public static void main(String[] args) {
// 주사위 배열, 10번 던져서 나올 경우의 수 arr 배열 생성
int[] dice = {1, 2, 3, 4, 5, 6};
int[] arr = new int[10];
// 주사위 수 중 무작위로 골라 배열 arr에 넣기
for (int i = 0; i < arr.length; i++) {
int tmp = (int)(Math.random() * dice.length);
arr[i] = dice[tmp];
}
System.out.println(Arrays.toString(arr); // [1,3,2,6,4,2,1,5,4,5]
}
// 버블정렬 알고리즘으로 오름차순 정렬
public class ArrayEx10 {
public static void main(String[] args) {
// 배열 생성
int[] arr = new int[10];
// 0~9 중 임의의 숫자로 배열 초기화
for (int i = 0; i < arr.length; i++) {
arr[i] = (int)(Math.random() * 10); // 1344213843
}
// 버블 정렬 (서로 인접한 두 원소를 검사하여 정렬)
for (int i = 0; i < arr.length-1; i++) {
boolen changed = false; // 자리 바꿈 여부
for (int j = 0; j < arr.length-1-i; j++) {
if (arr[j] > arr[j+1]) { // 왼쪽 값이 크면 자리 바꾸기
int temp = arr[j];
int arr[j] = arr[j+1];
int arr[j+1] = temp;
changed = true;
}
}
if (!changed) break;
for (int k = 0; k < arr.length; k++) {
System.out.print(arr[k]); // 1123334448
}
public class ArrayEx11 {
public static void main(String[] args) {
// 길이가 10인 배열 생성
int[] arr = new int[10];
// 0~9 중 임의의 숫자로 배열 초기화
for (int i = 0; i < arr.length; i++) {
arr[i] = (int)(Math.random() * 10);
}
// count[arr의 값] = arr의 값의 빈도수
for (int i = 0; i < arr.length; i++) {
count[arr[i]]++;
}
// 빈도 수 출력
for (int i = 0; i < arr.length; i++) {
System.out.println(i + "의 개수: " + count[i]);
}