자바의 정석 Chapter05 배열

Eunkyung·2021년 10월 13일
0

Java

목록 보기
5/21

1. 배열

1.1 배열

같은 타입의 여러 변수를 하나의 묶음으로 다루는 것

1.2 배열의 선언과 생성

타입[] 변수이름 = new 타입[길이];

1.3 배열의 길이와 인덱스

인덱스의 범위는 0부터 '배열길이-1'까지이다.
배열은 한번 선언되고 나면 길이를 변경할 수 없기 때문에 길이를 변경할 경우, 더 큰 배열을 새로 생성한 후에 기존 배열을 새로운 배열에 복사해야한다.

1.4 배열의 활용

총합과 평균

/**
 * 총합과 평균
 */

public class ArrayEx5 {
    public static void main(String[] args) {
        int sum = 0; // 총합을 저장하기 위한 변수
        float avg = 0f; // 평균을 저장하기 위한 변수

        int[] score = {100, 88, 100, 100, 90}; // 배열의 생성과 초기화

        for (int i = 0; i < score.length; i++) {
            sum += score[i];
        }

        avg = sum / (float) score.length; // 정확한 값을 얻기 위해 형 변환

        System.out.println("총점 : " + sum);
        System.out.println("평균 : " + avg);
    }
}

최대값과 최소값

/**
 * 최대값과 최소값
 */

public class ArrayEx6 {
    public static void main(String[] args) {
        int[] score = {79, 88, 91, 33, 100, 55, 95};

        int max = score[0];
        int min = score[0];

        for (int i = 0; i < score.length; i++) {
            if (score[i] > max) {
                max = score[i];
            } else if (score[i] < min) {
                min = score[i];
            }
        }
        System.out.println("최대값 : " + max);
        System.out.println("최소값 : " + min);
    }
}

섞기

/**
 * 섞기
 */

public class ArrayEx7 {
    public static void main(String[] args) {
        int[] numArr = new int[10];

        for (int i = 0; i < numArr.length; i++) {
            numArr[i] = i; // 0~9로 초기화
            System.out.println(numArr[i]);
        }
        System.out.println();

        for (int i = 0; i < 100; i++) {
            int n = (int) (Math.random() * 10); // 0~9사이의 랜덤한 값
            int tmp = numArr[0];
            numArr[0] = numArr[n];
            numArr[n] = tmp;
        }

        for (int i = 0; i < numArr.length; i++) {
            System.out.println(numArr[i]);
        }
    }
}

임의의 값으로 배열 채우기

/**
 * 임의의 값으로 배열 채우기
 */

public class ArrayEx9 {
    public static void main(String[] args) {
        int[] code = {-4, -1, 3, 6, 11}; // 불연속적인 값들로 구성된 배열
        int[] arr = new int[10];

        for (int i = 0; i < arr.length; i++) {
            int tmp = (int) (Math.random() * code.length);
            arr[i] = code[tmp];
        }
        System.out.println(Arrays.toString(arr));
    }
}

버블정렬

/**
 * 정렬 - 버블정렬 알고리즘
 */

public class ArrayEx10 {
    public static void main(String[] args) {
        int[] numArr = new int[10];
        for (int i = 0; i < numArr.length; i++) {
            System.out.println(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]) { // 앞의 값이 더 크면 교환
                    int tmp = numArr[j];
                    numArr[j] = numArr[j + 1];
                    numArr[j + 1] = tmp;
                    changed = true; // 자리바꿈이 발생했으니 changed 변경
                }
            }
            if (!changed) {
                break; // 자리바꿈이 없으면 반복문 종료
            }
            for (int k = 0; k < numArr.length; k++) {
                System.out.println(numArr[k]);
            }
            System.out.println();
        }
    }
}

빈도수 구하기

/**
 * 빈도수 구하기
 */

public class ArrayEx11 {
    public static void main(String[] args) {
        int[] numArr = new int[10];
        int[] counter = new int[10];

        for (int i = 0; i < numArr.length; i++) {
            numArr[i] = (int) (Math.random() * 10);
            System.out.print(numArr[i]);
        }
        System.out.println();
        for (int i = 0; i < numArr.length; i++) {
            counter[numArr[i]]++; // numArr에 저장된 값과 일치하는 인덱스의 요소에 저장된 값 1 증가
        }
        for (int i = 0; i < numArr.length; i++) {
            System.out.println(i + "의 개수 : " + counter[i]);
        }
    }
}

2. String 배열

String클래스는 char배열에 기능(메서드)을 추가한 것

String클래스의 주요 메서드

char배열과 String클래스의 변환

/**
 * char배열과 String클래스의 변환
 */

public class ArrayEx14 {
    public static void main(String[] args) {
        String src = "ABCDE";
        for (int i = 0; i < src.length(); i++) {
            char ch = src.charAt(i); // src의 i번째 문자 ch에 저장
            System.out.println("shr.char(" + i + "): " + ch);
        }
        char[] chArr = src.toCharArray(); // String을 char[]로 변환

        System.out.println(chArr);
    }
}

3. 다차원 배열

public class ArrayEx18 {
    public static void main(String[] args) {
        int[][] score = {
                {100, 100, 100,},
                {20, 20, 20},
                {30, 30, 30},
                {40, 40, 40}
        };

        int sum = 0;

        for (int i = 0; i < score.length; i++) {
            for (int j = 0; j < score[i].length; j++) {
                System.out.printf("score[%d][%d]=%d%n", i, j, score[i][j]);
            }
        }
        // 배열에 배열!!
        for (int[] tmp : score) { // score의 각 요소(1차원 배열의 주소)를 tmp에 저장
            for (int i : tmp) { // tmp는 1차원 배열을 가리키는 참조변수
//                System.out.println("--->"+i);
                sum += i;

            }
        }
        System.out.println("sum = " + sum);
    }
}

출처

  • 자바의 정석 - 남궁성 지음
profile
꾸준히 하자

0개의 댓글