5주 차 자바 수업 - SangwooRyou/26_Java GitHub Wiki
자료 구조 : 배열(array)
- 하나의 변수에 1가지 이상의 값을 한 번에 담음. → 메모리 사용.
- 같은 타입의 데이터 순차 저장. [메모리 연속적]
배열의 선언
- Java에서의 배열은 다음과 같은 단계를 거침.
- 배열 선언 :
[]이용하기
int intArray[];
char charArray[];
// [] 중간에 끼워도 됨.
int [] intArray;
char [] charArray;
- 배열 생성 : 배열은 레퍼런스형
intArray = new int[10];
charArray = new char[20];
// 선언과 생성을 같이 할 수 있다.
int intArray = new int[10];
char charArray = new char[20];
- 배열 초기화 :
{}이용하기
int intArray[] = {0, 1, 2, ... , 9};
- 잘못된 배열 선언
int intArray[10]; // 선언 시에 배열 크기를 지정하면 안 됨.
값을 {}를 통해 집어넣으면 알아서 개수에 맞게 크기가 지정됨.
예제 1 : 배열에 입력 받은 양수 중 제일 큰 수 찾기
package day05;
import java.util.Scanner;
public class Array01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int intMax = 0;
// 1차원 배열 선언
int intArray[];
// 배열 생성
intArray = new int[5];
// 배열 초기화 및 비교 (양수만 입력)
for (int i = 0; i < 5; i++) {
System.out.print((i + 1) + "번째 배열 원소 입력 > ");
intArray[i] = sc.nextInt();
if (intArray[i] > intMax) {
intMax = intArray[i];
}
}
System.out.println("제일 큰 수는 " + intMax + "입니다.");
sc.close();
}
}
여기기서 반복문 조건을 배열의 크기인 5만큼으로 설정했지만 .length를 이용해 동적으로 이용할 수 있음.
for(int i=0; i<intArray.length; i++){}
예제 2 : 입력 받은 배열의 평균 구하기
for (int i = 0; i < intArray.length; i++) {
System.out.print((i + 1) + "번째 배열 원소 입력 > ");
intArray[i] = sc.nextInt();
if (intArray[i] > intMax) {
intMax = intArray[i];
}
sum += intArray[i];
}
double avg = (double)sum/intArray.length;
for-each문
- 배열이나 나열의 원소에 접근할 때 유리. (빠름)
:을 통해 변수:배열의 구조를 key:value 객체
int [] num = {1, 2, 3, 4, 5};
int sum = 0;
// num 배열에서 k가 하나씩 증가하면서 다 돌게 됨.
for(int k : num){
sum += k;
}
- C는 char형 배열이라 마지막에 null 문자가 들어가는데,
- java는 String 객체라 null 문자가 안 들어감.
package day05;
public class Array04 {
public static void main(String[] args) {
String str[] = {"사과", "바나나", "딸기", "복숭아", "포도"};
for(String k:str) {
System.out.println(k);
}
}
}
2차원 배열
- 기본적인 사용 방법은 1차원 배열과 선언.
[rows][cols]형태로 사용하기에 동적 메모리 할당 영역인 힙(heap)을 사용함.length사용 시 행의 크기가 나옴. 인덱스에 대한 길이를 보고 싶다면i[index].length형태로 사용.- 행의 개수가 열의 개수보다 중요하게 다뤄짐. (열은 스킵 가능)
예제 1. 대학교 4년 평균 평점 구하기
package day05;
public class Array05 {
public static void main(String[] args) {
// 2차원 배열 : 4행 2열
double score[][] = {{3.3, 3.4}, {3.5, 3.6}, {3.7, 4.0}, {4.1, 4.2}};
double sum = 0;
// 평균 평점 구하기
for(int year = 0; year < score.length; year++) {
for(int term = 0; term<score[year].length; term++) {
sum += score[year][term];
}
}
int n = score.length;
int m = score[0].length;
double avg = sum/(n*m);
System.out.println(n+"년 전체 평점 평균 "+avg);
}
}
예외 처리
try-catch()구문으로 오류를 확인할 수 있음.- 이때 catch에 들어가는 다양한 요소들이 있는데, 대표적으로
ArrayIndexOutofBoundsException : 배열 크기가 존재함.