JAVA 배열, 2차원 배열

반응형

JAVA 배열

다음의 질문에 답해보도록 하자.

  • 배열이 필요한 이유는 무엇일까?
  • 배열은 어떻게 구성되어있는가?

배열의 선언 2가지 방법

일반적인 배열 선언 (기본값은 0)

int[] array = new int[5]; // default : 0

배열 선언과 동시에 값을 할당하기

int[] array2 = {1,2,3,4,5}; //선언과 동시에 값을 할당

반복문과 배열을 함께 사용하기 (for문과 array의 결합)

레퍼런스 타입을 가지고 배열을 만들 수도 있다. ex) CustomClass[]

배열변수에는 메모리상의 어떤 지점을 가리키는 주소값이 할당되어 있다.

배열변수가 담고 있는 정보 : 주소(레퍼런스 타입 변수의 특징, 메모리의 값이 담긴 위치를 가리킨다.)

[실습1] 크기 10의 배열에 난수를 담고 배열의 모든 값을 합하여 출력해보기

public static void main(String[] args) {
    Random rd = new Random();

    int[] arr = new int[10];
    int sum = 0;

    for(int i = 0; i < 10; i++) {
        arr[i] = rd.nextInt(20) + 1;
        System.out.print( i + ": " + arr[i] + "\t\t");
        sum += arr[i];
    }

    System.out.println("난수의 합계: " + sum);
}

 

반응형

 

[실습2] 정의된 배열에서 홀수의 개수 구하기

public static void main(String[] args) {
    int[] arr = { 10, 34, 6, 18, 10, 4, 123, 56, 79 };

    int count = 0;

    for (int i = 0; i < arr.length; i++) {
        if (arr[i] % 2 != 0) {
            count++;
        }
    }
    System.out.println(count);
}

[실습3] 정의된 배열 중 최댓값 찾기

※ 최댓값이나 최솟값을 판단하는 Max 변수를 0이나 큰 값이 아닌 배열의 첫 번째 값으로 담기도 한다.

public static void main(String[] args) {
    Random rd = new Random();

    int[] arr = new int[10];
    int max = 0;

    for(int i=0; i<arr.length; i++) {
        arr[i] = rd.nextInt(30)+1;
        System.out.print(arr[i] + "   ");
        if (arr[i] > max) {
            max = arr[i];
        }
    }

    for (int i : arr) {
        if(max < i) 
            max = i;
    }

    System.out.println("\n" + max);
}

JAVA for each 문

확장된 형태의 for 문

  • Q. 확장 for 문이란?
    조금 더 문법이 간결하지만 사용용도는 제한되어 있다. 배열의 길이에 대한 판단을 하지 않고 배열의 모든 값을 추출해야 할 때.
    문법은 아래와 같다.
for(int i : array) {
    //(실행구문)
}

[실습4] 정답 산출 후 총점 출력 프로그램

배열로 정답은 주어져있으며, 사용자의 정답정보를 입력받아 기존 배열과 비교하여 각 점수별 정답여부와 총점을 출력한다.

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int[] answer = {1,2,3,4,5};
    int[] inputAnswer = new int[5];

    System.out.println("=== 채점하기 ===");
    System.out.println("답을 입력하세요.");
    for (int i = 0; i < 5; i++) {
        System.out.print( (i+1) + "번답 >> ");
        inputAnswer[i] = sc.nextInt();
    }

    System.out.println("정답확인");

    int count = 0;
    for(int i = 0; i < 5; i++) {
        if(answer[i] == inputAnswer[i]) {
            System.out.print("O\t");
            count++;
        }
        else
            System.out.print("X\t");
    }

    System.out.println("총 점 : " + count*20);
}

Reference Type (참조형) 배열 만들기

String 은 참조형이다. 따라서 String 배열을 선언하면 참조형 배열을 선언한다고 할 수 있다.

//참조형(예를들어 String)의 배열을 선언할 수 있다.
String[] names = {"AB", "CD", "EF", "GD"}

[실습5] Scanner 로 사람 이름을 입력받아 해당 이름이 몇 번째 인덱스에 있는지 알려주는 프로그램

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String[] arr = {"황해병", "이은별", "김미현", "박병선", "차현숙"};

    System.out.print("입력 : ");
    String input = sc.nextLine();

    int num = 0;

    for(int i =0; i < arr.length; i++) {
        if(input.equals(arr[i]))
            num = i+1;
    }

    System.out.println(num + "번째에 있음");
}

[실습6] 배열의 인덱스의 수 만큼 별을 출력하기

※ 세로로도 찍어보자. 이거 해보고 말고는 옵션!

public static void main(String[] args) {
    Random rd = new Random();
    int[] arr = new int[5];

    for(int i = 0; i < arr.length; i++) {
        arr[i] = rd.nextInt(5)+1;
        System.out.print(arr[i] + " : ");
        for(int j = 0; j < arr[i]; j++) {
            System.out.print("*");
        }
        System.out.println();
    }
}

 

JAVA 2차원 배열

변수가 묶여 1차원 배열이 된다면, 1차원 배열이 묶여 2차원 배열이 된다고 할 수 있다.

array2D[][] 의 구조

array2D : 배열의 주소가 저장되어있는 메모리를 참조한다.

array2D[0] : 배열의 배열의 주소가 저장되어 있는 메모리를 참조한다.

array2[0][1] : array2[0]에 저장되어있는 주소가 가리키는 메모리 주소의 [1]번째 블록에 저장된 값을 불러온다.

비정방형 배열

다음과 같은 배열을 비정방형 배열이라고 할 수 있다.
내부 배열의 길이가 서로 모두 다를 수 있다.

{{1,2,3},{4,5,6,7},{7,8}}

[실습7] 비정방형 배열을 순회하며 모든 데이터를 표현해보기

비정방형 배열은 내부 배열의 크기가 서로 다를 수 있음에 유의한다.

public static void main(String[] args) {
    int[][] arr = new int[2][3];

    int[][] arr2 = {{1,2,3},{4,5,6,7},{8,9}};

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

3차원 및 n차원 배열도 가능하다. [][][], 그러나 특별한 경우가 아닌 이상 잘 쓰이지는 않는다.

[실습8] 2차원 정방형 배열 90도 회전하기

public static void main(String[] args) {
    int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
    int[][] arr2 = new int[3][3];

    System.out.println("원본 배열 출력");
    for (int i = 0; i < arr.length; i++) {
        for (int j = 0; j < arr[i].length; j++) {
            System.out.print(arr[i][j]);
        }
        System.out.println();
    }

    System.out.println("90도 회전");
    for(int i = 0; i < arr.length; i++) {
        for (int j = 0; j < arr[i].length; j++) {
            arr2[j][i] = arr[2-i][j];
        }
    }

    System.out.println("회전한 배열 출력");
    for(int i=0; i < arr2.length; i++) {
        for (int j = 0; j < arr2[i].length; j++) {
            System.out.print(arr2[i][j]);
        }
        System.out.println();
    }
}
반응형

Designed by JB FACTORY