본문 바로가기

Java

[Day5-Java] 배열(1차원)

[Day5-Java] 배열(1차원) (22.09.13)

 

배열

 같은 자료형의 변수 여러 개를 하나의 묶음으로 만들어 하나의 이름으로 다루는 것을 배열이라고 한다.

 

 

 

배열의 선언

 배열공간의 주소 저장용 참조 변수를 만드는 것 (선언한다고 저장 공간이 생기진 않는다.)

타입[] 변수이름;

타입 변수이름[];

int[] arr;

int arr[];

 

 

 

배열의 생성

 Heap 영역에 값을 저장하는 변수들을 연속 나열 할당하고, 발생한 배열 공간의 시작 주소를 선언된 배열 레퍼런스에 대입한다.

배열참조변수 = new 데이터타입 [연속 할당될 변수 갯수];

데이터 타입 [] 변수 = new  데이터타입[첨자]; / String[] strArr = new String[3];

 

 

 

배열의 초기화

데이터 타입[] 배열참조변수 = {값1, 값2, 값3, ... }; / String strArr[] = {"Apple", "Banana", "Orange" };

데이터 타입[] 배열참조변수 = new 데이터타입[] {값1, 값2, 값3, ... };

 

 

public class jb_array {
    public static void main(String[] args) {
//        String strArr[] =new String[]{"Apple", "Banana", "Orange"};
        String strArr[] = {"Apple", "Banana", "Orange"};

        String strArrIndex1 = strArr[1];
        System.out.println("strArr배열의 1번째 인덱스 값은?: " + strArrIndex1);
        String strArrIndex2 = strArr[2];
        System.out.println("strArr배열의 2번째 인덱스 값은?: " + strArrIndex2);

        for (int i = 0; i < strArr.length; i++) {
            System.out.println(i +"번째 인덱스 값: " + strArr[i]);
        }
    }
}

strArr배열의 1번째 인덱스 값은?: Banana
strArr배열의 2번째 인덱스 값은?: Orange
0번째 인덱스 값: Apple
1번째 인덱스 값: Banana
2번째 인덱스 값: Orange

 

 

- 3번째 줄과 4번째 줄은 같은 의미이고, 4번째 줄은 new String[]을 생략하였다.

- 배열의 각 인덱스 값은 0부터 시작 출력과 같이 0번째 인덱스 요소는 Apple, 1번째 인덱스 요소는 Banana, 2번째 인덱스 요소는 Orange ( 인덱스: 순번을 나타내는 위치정보)

 

- 각 배열에 참조하기 위해서는 배열 변수명[인덱스값]으로 참조할 수 있고, for문을 통해 모든 값을 출력할 수 있다. 배열은 String의 길이를 알 수 있는 String.length()와 달리 배열의 길이는 strArr.length 괄호가 빠져있다.

 

- strArr에 배열의 크기는 3이다. strArr.length = 3 고로 i < strArr.length; 크기 값 이전까지 i 순환 또는 i <= strArr.length - 1;

 

 

 

예제1 - 배열 이동

package week_7;

public class w7_3 {
    public static void main(String[] args) {
        int[] array = {33,2,189,72,7,91,5,14,17,9};
        final int first = array[0];
        System.out.print("초기 배열 값: ");
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i]+" ");
        }

        for (int i = 0; i < array.length-1; i++) {
            array[i] = array[i+1];
        }
        array[array.length-1] = first;

        System.out.print("\n이동 후 배열 값: ");
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i]+" ");
        }
    }
}

초기 배열 값: 33 2 189 72 7 91 5 14 17 9 
이동 후 배열 값: 2 189 72 7 91 5 14 17 9 33 

 

 

 

예제2 - 배열 정렬

package week_7;

import java.util.Arrays;
import java.util.Comparator;

public class w7_4 {
    public static void main(String[] args) {
        String[] array = {"kim", "park", "oh", "lim", "pang", "seo", "lee",
                "yang", "bae", "back"};
        System.out.print("정렬 전: ");
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i]+" ");
        }
        System.out.println();
        System.out.print("정렬 후: ");
        Arrays.sort(array, Comparator.reverseOrder()); //내림차순 정렬
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i]+" ");
        }
    }
}

정렬 전: kim park oh lim pang seo lee yang bae back 
정렬 후: yang seo park pang oh lim lee kim bae back 

 

 

 

예제3 - 배열 응용

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class ex_3 {
    public static void main(String[] args) {
        float sum = 0;
        double average;
        int[] point = new int[5];

        Scanner input = new Scanner(System.in);
        for (int i = 0; i < 5; i++) {
            while(true) {
                System.out.println((i + 1) + "번째 심사위원의 점수: ");
                point[i] = input.nextInt();
                if ((0 > point[i]) ^ (100 < point[i])) {
                    System.out.println("점수는 0~100 사이로 입력해 주세요.");
                } else {
                    break;
                }
            }
        }
        int max = point[0]; //0으로 초기화하면 0이 가장 크거나 작은 값일 수 있기 때문
        int min = point[0];
        //-----------------------------------------------------
        System.out.println("총 입력된 점수");
        for (int j = 0; j < point.length; j++) {

            if (j == (point.length - 1)) {
                System.out.println(point[j] + " (점)");
            } else {
                System.out.print(point[j] + ", ");
            }
        }
        //-----------------------------------------------------
        System.out.println("제거 대상 점수");
        int max_z = 0;
        int min_z = 0;
        List<Integer> list_point = new ArrayList<>();
        for (int i = 0; i < point.length; i++) {
            list_point.add(point[i]);
        }

        for (int z = 0; z < point.length; z++) {

            if (max < point[z]) {
                max = point[z];
                max_z = z;
            }
        }
        list_point.remove(max_z);
        for (int z = 0; z < point.length; z++) {

            if (min > point[z]) {
                min = point[z];
                min_z = z;

            }
        }
        list_point.remove(min_z);
        System.out.println("최고 점수: " + max + "점");
        System.out.println("최소 점수: " + min + "점");

        //-----------------------------------------------------
        System.out.println("최종 입력 점수");


        int[] point_ = new int[list_point.size()];
        for (int i = 0; i < list_point.size(); i++) {
            point_[i] = list_point.get(i).intValue();
        }

        for (int i = 0; i < point_.length; i++) {
            System.out.print(point_[i] + " ");
            sum = sum + point_[i];
        }
        System.out.print("(점)");
        System.out.println();
        average = sum / point_.length;

        System.out.printf("총점: %.0f점\n", sum);
        System.out.printf("평균: %.2f점\n", average);
    }
}

1번째 심사위원의 점수: 
80
2번째 심사위원의 점수: 
70
3번째 심사위원의 점수: 
50
4번째 심사위원의 점수: 
44
5번째 심사위원의 점수: 
69
총 입력된 점수
80, 70, 50, 44, 69 (점)
제거 대상 점수
최고 점수: 80점
최소 점수: 44점
최종 입력 점수
70 50 44 (점)
총점: 164점
평균: 54.67점

 

화이팅화이팅 아자아자~~!

'Java' 카테고리의 다른 글

[Day4-Java] 제어문  (0) 2022.10.06
[Day3-Java] 변수와 자료형 2, 연산자  (0) 2022.10.06
[Day2-Java] 변수와 자료형1  (0) 2022.10.06
[Day1-Java] 프로그래밍  (0) 2022.10.05