5/11일 사전캠프 4일차 Part 4. 배열

2023. 5. 11. 20:34개발자 공부/Java

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

- 배열의 선언과 생성 

 배열의 선언 : 배열을 다루기 위한 참조변수의 선언 

 ● 선언 방법 

   1) 타입[ ] 변수이름;

       int[ ] age ; , String[ ] name;

    2) 타입 변수이름[ ];

       int age[ ]; , String name[ ] ;

  ● 배열의 생성 : 실제 저장공간을 생성

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

                            ex) int[ ] age; → int 타입의 배열을 다루게 위란 참조 변수 age 선언

                                  age = new int[5]; → int 타입의 값 5개를 저장할 수 있는 배열 생성 

 

   - 배열의 인덱스 : 각 요소 (저장공간)에 자동으로 붙는 일렬 번호 

                                    인덱스 (index)의 범위는 0부터 "배열의 길이 -1'까지 

 

2. 배열의 길이와 초기화 

   - 배열의 길이 (int형 상수) : 배열이름 뒤에 "length"를 붙이면 배열 길이를 정수 형태로 반환한다. 

       int[ ] arr = new int [5]; → 길이가 5인 int 배열

       int  tmp = arr.length; → arr.length의 값은 5이고, tmp 값은 5가 저장된다. 

       "배열은 한번 생성되면 컴파일 후 실행되는 동안은 그 길이(크기)를 바꿀 수 없습니다."

   

   - 배열의 초기화 : 배열의 각 요소에 처음으로 값을 저장하는 것을 의미합니다.

        → 배열은 기본적으로 저장 하려는 값의 타입의 기본값으로 자동 초기화 해준다.

  초기화 방법 

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

    2) int[ ] num = {1, 2, 3, 4, 5, 6, 7, 8, 9}; → new int[ ] 를 생략 가능

 

- 배열의 출력

   int[ ] iArr = {100, 90, 80, 70, 60, 50, 40, 30, 20, 10}; 배열을 가리키는 참조 변수 iArr 을 출력
        System.out.println(iArr); 메모리 주소와 비슷한 (I@7a81197d) 문자열이 출력 [(배열을 뜻함), I(int                                                        타입을 뜻함), @(위치를 뜻함)
      ※ 예외 확인 하기 - char[ ]
        char[ ] chArr = {'a', 'b', 'c', 'd'};
        System.out.println(chArr); → abcd 가 출력되는데 이는 println 메서드의 기능 때문!

        →  배열의 요소 하나씩 출력하기
        for (int i = 0; i < arr.length; i++) {
            System.out.println("arr[" + i + "] = " + arr[i]);
        }
        → Arrays.toString(배열) : 배열의 모든 요소를 문자열로 만들어서 반환한다.
        System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));
          }
        }

- 총합과 평균

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

        int[ ] score = {100, 40, 33, 50, 77, 29};

        for (int i = 0; i < score.length; i++) {
            System.out.println("score[" + i + "] = " + score[i]);
            sum += score[i];  → 반복문을 이용해서 배열에 저장되어 있는 값들을 모두 더한다. 
        }

        avg = sum / (float) (score.length); → 계산결과를 float 타입으로 얻기 위해 형변환

        System.out.println("총합 = " + sum);
        System.out.println("평균 = " + avg);
    }
}

 

- 최대값과 최소값

class Arrays3_3 {
    public static void main(String[ ] args) {
        int[ ] score = {65, 97, 88, 43, 33, 91, 28};

        int max = score[0]; → 최대값을 배열의 첫 번째 값으로 초기화 한다.
        int min = score[0]; → 최소값을 배열의 첫 번째 값으로 초기화 한다.

        for (int i = 1; i < score.length; i++) { → 배열의 두 번째 요소부터 읽기 위해서 변수 i의 값을 1로 초기화 한다.
            if (score[i] > max) {
                max = score[i];
            } else if(score[i] < min) {
                min = score[i];
            }
        }

        System.out.println("최대값 = " + max);
        System.out.println("최소값 = " + min);
    }
}

- 랜덤으로 숫자 섞기 

class Arrays3_4 {
    public static void main(String[ ] args) {
        int[ ] numArr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
        System.out.println("원본 = " + Arrays.toString(numArr));

        for (int i = 0; i < numArr.length; i++) {
            int num = (int) (Math.random() * 10); → 0 ~ 9 중의 값을 임으로 얻는다


            int tmp = numArr[0]; → numArr[0]과 number[n] 의 값을 서로 바꾼다 
            numArr[0] = numArr[n]; 
            numArr[n] = tmp;

         System.out.println("결과 = " + Arrays.toString(numArr));
    }
}

 

3. String 배열 

  : 여래개의 문자열을 저장 할 수 있는 배열 

   String [ ] name = new String [3];

     → 3개의 문자열을 담을 수 있는 배열을 생성하며, 참조형 이기 때문에 기본값 null로 초기화 된다.

 

→ String 클래스는 내용을 변경할 수 없으며, 새로운게 만들어집니다.   

  ex) String name = "choi";

       String firstName = "wb";

        name = name + firstName;

 

4. 2차원 배열 

: 테이블 형태의 데이터를 저장하기 위한 배열이다.

- 2차원 배열의 선언과 생성 

   : int[ ][ ] score = new int[4][3]; → 4행 3열의 2차원 score가 생성된다. 

 

→ 행 index (0 ~ 행의 수 -1), 열 index (0 ~ 열의 수 -1) 

 

- 2차원 배열의 초기화

  1) int[ ] [ ] score = new int[ ][ ]{{ }, { }, { }, { }};
  2) int[ ][ ] score = {{ }, { }, { }, { }};

4. Array 
: 배열의 비교와 출력 _ equals ( ), toString( )

- 배열 출력

 tostring ( ) : 배열을 문자열로 바꿔줌

 deeptostring ( ) : 2차원 또는 다차원 배열 사용

 

- 배열 비교 

1차원 비교에는 equals
System.out.println("Arrays.equals(strArr1[0], strArr2[0]) = " + Arrays.equals(strArr1[0], strArr2[0])); // true

System.out.println("Arrays.equals(strArr1[1], strArr2[0]) = " + Arrays.equals(strArr1[1], strArr2[0])); // false
다차원 비교에는 deepEquals
 
System.out.println("Arrays.deepEquals(strArr1, strArr2) = " + Arrays.deepEquals(strArr1, strArr2)); // true

- 배열 복사

● copyof () : 배열 전체를 복사

int [ ] arr = {0,1,2,3,4} ;

int [ ] arr2 = Arrays.copyof (arr.length); → arr2 = {0,1,2,3,4}

int [ ] arr3 = Arrays.copyof (arr, 3); → arr3 = {0,1,2}

int [ ] arr4 = Arrays.copyof (arr, 7); → arr3 = {0,1,2,3,4,0,0}

copyOfRange () : 배열의 일부를 복사해서 새로운 배열을 만들어 반환하며, 지정된 범위의 끝은 포험되지 않는다.

   int [ ] arr5 = Arrays.copyOfRange (arr, 시작부분, 끝부분 ) 

  int [ ] arr5 = Arrays.copyOfRange (arr, 2, 4) → arr5 = {2,3} 

- 배열의 정렬 

● sort () : 배열을 정렬하는 역할 

    int[ ] arr = {3, 1, 8, 5, 9, 2, 10, 7, 6, 4};
    Arrays.sort(arr); → 오름차순으로 정렬된다.
    System.out.println("sort");
   System.out.println("Arrays.toString(arr); → [0, 1, 2, 3, 4]