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 : 배열 크기가 존재함.