배열이란,
같은 타입의 여러 변수들을 하나의 묶음으로 다루는 것을 말한다.
배열의 선언과 생성은 두 가지 방식으로 할 수있다.
1. 타입[] 배열이름;
2. 타입 배열이름[];
생성된 배열의 인덱스는 "0부터 배열길이 - 1 까지"이다.
유효한 범위를 벗어나게 된다면 ArrayIndexOutOfBoundsException이 발생한다.
public class arrayEx1 {
public static void main(String[] args) {
int[] score = new int[5];
int k = 1;
score[0] = 50;
score[1] = 60;
score[2] = 70;
score[3] = 80;
score[4] = 90;
int tmp = score[k + 2] + score[4];
for (int i = 0; i < 5; i++) {
System.out.printf("score[%d] : %d%n", i, score[i]);
}
System.out.printf("tmp:%d%n", tmp);
System.out.printf("score[%d]:%d%n", 7, score[7]); // out of bounds
}
}
length라는 배열의 내장함수를 사용해 배열의 크기를 얻을 수 있다.
배열의 복사
System 클래스의 arrayCopy()를 사용해 간단하게 배열을 복사할 수 있다.
for문을 사용하여 하나하나 복사하는 것보다 더 효율적이다.
public class arrayEx2 {
public static void main(String[] args) {
char[] abc = {'A', 'B', 'C', 'D'};
char[] num = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
System.out.println(abc);
System.out.println(num);
char[] result = new char[abc.length + num.length];
System.arraycopy(abc, 0, result, 0, abc.length);
System.arraycopy(num, 0, result, abc.length, num.length);
System.out.println(result);
System.arraycopy(abc, 0, num, 6,3);
System.out.println(num);
System.arraycopy(abc, 0, num, 6, 3);
System.out.println(num);
}
}
배열의 활용
배열을 활용해서 다양한 예제를 해결할 수 있다.
그 중 대표적인 예제인 최댓값을 구하는 과정을 배열을 이용해 구현해보았다 .
최댓값 구하기
// 버블 정렬
public class arrayEx3 {
public static void main(String[] args) {
int[] numArr = new int[10];
for (int i = 0; i < numArr.length; i++) {
System.out.print(numArr[i] = (int) (Math.random() * 10));
}
System.out.println();
for (int i = 0; i < numArr.length - 1; i++) {
boolean changed = false; // 자리바꿈이 생겼는지 체크
for (int j = 0; j < numArr.length - 1 - i; j++) {
if (numArr[j] > numArr[j + 1]) { // 왼쪽이 더 크면 swap --> 오름차순 정려
int temp = numArr[j];
numArr[j] = numArr[j + 1];
numArr[j +1] = temp;
changed = true;
}
}
if (!changed) {
break;
}
for (int k = 0; k < numArr.length; k++) {
System.out.print(numArr[k]);
}
System.out.println();
}
}
}
String 배열
String [] name = new String[3];
구문을 사용해서 배열을 선언할 수 있다.
public class arrayEx4 {
public static void main(String[] args) {
String[] names = {"Kim", "Park", "Yi"};
for (int i = 0; i < names.length; i++) {
System.out.println("names[+i+]:" + names[i]);
}
String temp = names[2];
System.out.println("temp : " + temp);
names[0] = "Yu";
for (String str : names) {
System.out.println(str);
}
}
}
배열에는 실제 객체가 아닌 객체의 주소가 저장된다.
참조형 배열을 객체 배열이라고도 한다.
또한 String 클래스는 char배열에 기능을 추가한 것이라고 볼 수 있다.
아래처럼 main함수에 있는 String[] args를 이용해서 커멘드라인으로 입력받을 수 있다.
public class arrayEx5 {
public static void main(String[] args) {
System.out.println("매개변수의 개수" + args.length);
for (int i = 0; i < args.length; i++) {
System.out.println("args[" + i + "] = \"" + args[i] + "\"");
}
}
}
'Langauge > Java' 카테고리의 다른 글
Java의 정석 Chapter7.객체지향 프로그래밍2 (0) | 2022.03.13 |
---|---|
Java의 정석 Chapter6. 객체지향 프로그래밍 (0) | 2022.03.13 |
Java의 정석 Chapter3. 연산자 / Chapter4. 조건문과 반복문 (0) | 2022.03.07 |
Java의 정석 Chapter2. 변수 (0) | 2022.03.07 |
Java의 정석 Chapter1. 자바를 시작하기 전에 (0) | 2022.03.07 |