이번 편의 목표: 같은 자료형의 값을 배열에 담고 length와 for-each로 순회합니다.

변수 여러 개로 책 다섯 권의 연체 일수를 저장하면 이름이 늘어납니다. 개수가 정해져 있고 종류가 같으면 배열이 맞습니다.

선언과 순회

Java
public class LateDays {
    public static void main(String[] args) {
        int[] days = {2, 0, 5, 1};
        String[] titles = {"개미", "공책", "파이썬", "자바"};
        int total = 0;
        for (int i = 0; i < days.length; i++) {
            total = total + days[i] * 100;
            System.out.println(titles[i] + " " + days[i] + "일");
        }
        System.out.println("합계 " + total + "원");
    }
}

인덱스는 0부터 시작합니다. length는 원소 개수이므로 마지막 인덱스는 length - 1입니다. 위 합계는 800원입니다.

원소만 필요하고 인덱스가 필요 없으면 for-each가 짧습니다.

Java
int totalDays = 0;
for (int day : days) {
    totalDays = totalDays + day;
}
System.out.println(totalDays);

출력은 8입니다.

배열의 한계

배열은 만들 때 길이가 정해집니다. new int[4]처럼 길이만 정하면 정수는 0으로 채워집니다. 책을 계속 추가하고 빼려면 길이가 바뀌는 목록이 필요하지만, 그 클래스는 이번 연재에서 다루지 않습니다. 권수가 정해진 계산에는 배열로 충분합니다.

인덱스가 길이를 벗어나면 ArrayIndexOutOfBoundsException이 발생합니다. 반복 조건에 length를 쓰면 이 실수를 줄일 수 있습니다.

직접 해 보기

연체 일수 1, 3, 0을 배열에 넣고 100원을 곱한 합계를 출력하세요.

해설

Java
public class ThreeFees {
    public static void main(String[] args) {
        int[] days = {1, 3, 0};
        int total = 0;
        for (int day : days) {
            total = total + day * 100;
        }
        System.out.println(total);
    }
}

출력은 400입니다.