JAVA 자바 배열(Array)
자바 프로그래밍에서 배열은 여러 개의 동일한 자료형 값을 저장하는 도구입니다. 데이터를 효율적으로 관리하고 처리하는데 필수적인 역할을 하며, 다양한 프로그래밍 상황에서 활용됩니다.
1. 자바 배열 개요
1.1 배열 특징:
- 동일한 자료형 값 저장: int, double, String 등 다양한 자료형을 사용 가능
- 고정된 크기: 선언 시 크기를 지정하며, 크기 변경 불가능
- 데이터 접근: 배열 인덱스를 사용하여 원하는 값에 직접 접근 가능
- 효율적인 메모리 관리: 연속된 메모리 공간에 저장되어 메모리 사용 효율성 향상
1.2 배열 선언 및 초기화:
// int 형 배열 선언 및 초기화
int[] numbers = {10, 20, 30, 40, 50};
// String 형 배열 선언 및 초기화
String[] names = {"홍길동", "이순신", "유관순"};
// 다차원 배열 선언 및 초기화
int[][] scores = {{90, 80, 70}, {60, 50, 40}, {100, 95, 85}};
1.3 배열 요소 접근 및 변경:
// 배열 요소 접근
int firstNumber = numbers[0]; // 첫 번째 요소 값 읽기
System.out.println("첫 번째 요소: " + firstNumber); // 10 출력
// 배열 요소 변경
numbers[2] = 30; // 세 번째 요소 값 변경
System.out.println("변경 후 세 번째 요소: " + numbers[2]); // 30 출력
1.4 배열 길이:
int length = numbers.length; // 배열 길이 확인
System.out.println("배열 길이: " + length); // 5 출력
2. 자바 배열 예시
2 - 1 배열 요소 접근 및 변경:
// 배열 요소 접근
int firstNumber = numbers[0]; // 첫 번째 요소 값 읽기
System.out.println("첫 번째 요소: " + firstNumber); // 10 출력
// 배열 요소 변경
numbers[2] = 100; // 세 번째 요소 값 변경
System.out.println("변경 후 세 번째 요소: " + numbers[2]); // 100 출력
2 - 2 for 루프를 사용한 반복:
// 배열 모든 요소 출력
for (int i = 0; i < numbers.length; i++) {
System.out.println(numbers[i]);
}
// 배열 모든 요소 제곱하여 출력
for (int i = 0; i < numbers.length; i++) {
numbers[i] *= numbers[i];
System.out.println(numbers[i]);
}
2 - 3 for 문 루프:
// 배열 모든 요소 출력
for (int number : numbers) {
System.out.println(number);
}
// 배열 모든 요소의 합 계산
int sum = 0;
for (int number : numbers) {
sum += number;
}
System.out.println("배열 요소 합: " + sum);
2 - 4 배열 복사:
// 배열 복사
int[] copyNumbers = new int[numbers.length];
System.arraycopy(numbers, 0, copyNumbers, 0, numbers.length);
// 복사된 배열 확인
for (int number : copyNumbers) {
System.out.println(number);
}
2 - 5 배열 비교:
int[] numbers1 = {10, 20, 30};
int[] numbers2 = {10, 20, 30};
// 배열 비교 (동일 여부 확인)
boolean isEqual = Arrays.equals(numbers1, numbers2);
System.out.println("배열 동일 여부: " + isEqual); // true 출력
3. 실전 활용 예시
3 - 1 학생 성적 관리:
// 학생 이름과 점수를 저장하는 배열
String[] names = {"김철수", "이영희", "박지수"};
int[] scores = {80, 95, 70};
// 각 학생의 성적 출력
for (int i = 0; i < names.length; i++) {
System.out.println(names[i] + " : " + scores[i]);
}
// 최고 점수 학생 찾기
int maxScore = scores[0];
int maxIndex = 0;
for (int i = 1; i < scores.length; i++) {
if (scores[i] > maxScore) {
maxScore = scores[i];
maxIndex = i;
}
}
System.out.println("최고 점수 학생: " + names[maxIndex] + ", 점수: " + maxScore);
3 - 2 문자열 처리:
// 문자열을 배열로 변환
String str = "Hello, Java!";
char[] chars = str.toCharArray();
// 배열 요소 출력
for (char c : chars) {
System.out.println(c);
}
// 배열을 문자열로 변환
String newStr = new String(chars);
System.out.println("새로운 문자열: " + newStr);
3 - 3 특정 값 검색:
// 배열에서 특정 값이 존재하는지 확인
int[] numbers = {10, 20, 30, 40, 50};
int target = 30;
boolean isFound = false;
for (int number : numbers) {
if (number == target) {
isFound = true;
break;
}
}
System.out.println(target + " 값 존재 여부: " + isFound);
3 - 4 배열 정렬:
// 배열 정렬 (오름차순)
int[] numbers = {5, 2, 4, 1, 3};
Arrays.sort(numbers);
// 정렬된 배열 출력
for (int number : numbers) {
System.out.println(number);
}
// 배열 정렬 (내림차순)
int[] numbers2 = {5, 2, 4, 1, 3};
Comparator<Integer> reverseComparator = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2.compareTo(o1);
}
};
Arrays.sort(numbers2, reverseComparator);
// 내림차순으로 정렬된 배열 출력
for (int number : numbers2) {
System.out.println(number);
}
3 - 5 커스텀 정렬:
// 학생 정보를 저장하는 배열
class Student {
String name;
int score;
public Student(String name, int score) {
this.name = name;
this.score = score;
}
}
Student[] students = {new Student("홍길동", 90), new Student("이순신", 85), new Student("유관순", 70)};
// 점수 기준으로 정렬
Arrays.sort(students, new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
return s2.score - s1.score; // 점수 내림차순 정렬
}
});
// 정렬된 학생 정보 출력
for (Student student : students) {
System.out.println(student.name + " : " + student.score);
}
3 - 5 2차원 배열 탐색:
// 2차원 배열 (미로) 탐색
int[][] maze = {
{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 1}
};
// 시작 위치 (0, 0)에서 목적 위치 (3, 3)까지 경로 탐색
boolean[][] visited = new boolean[maze.length][maze[0].length];
Stack<int[]> path = new Stack<>();
boolean found = false;
dfs(0, 0, path, visited, maze, found);
if (found) {
System.out.println("경로 존재!");
while (!path.isEmpty()) {
int[] position = path.pop();
System.out.println("(" + position[0] + ", " + position[1] + ")");
}
} else {
System.out.println("경로 없음");
}
// 재귀 함수 (깊이 우선 탐색)
private static void dfs(int x, int y, Stack<int[]> path, boolean[][] visited, int[][] maze, boolean found) {
if (x < 0 || x >= maze.length || y < 0 || y >= maze[0].length || visited[x][y] || maze[x][y] == 0) {
return;
}
visited[x][y] = true;
path.push(new int[]{x, y});
if (x == maze.length - 1 && y == maze[0].length - 1) {
found = true;
return;
}
dfs(x - 1, y, path,
'JAVA' 카테고리의 다른 글
JAVA 자바 객체 지향 프로그래밍 (OOP) (0) | 2024.05.26 |
---|---|
JAVA 함수 (Function) (0) | 2024.05.26 |
JAVA Math 클래스 (0) | 2024.05.26 |
JAVA 반복문 While 문 (0) | 2024.05.26 |
JAVA 반복문 for 문 (0) | 2024.05.26 |