혜야의 코딩스토리

배열 본문

꿈 : 멋진 개발자 🧸/자바의 정석

배열

hyeya_ 2022. 4. 29. 01:15

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

 

Int[ ] score = new int[5]; // 5개의 int값을 저장할 수 있는 배열을 생성한다.

 

참조변수 score

0x100

->

0x100

0 0 0 0 0

   score[0]   score[1]   score[2]    score[3]    score[4]                 

 

타입[ ] 변수이름 = new 타입[길이]; // 배열의 선언과 생성을 동시에.

 

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

인덱스의 범위는 0부터 배열길이-1’까지

Int[ ] score = new int[5]; // 길이가 5인 int배열, 인덱스는 [0]~[4]

 

[배열의 길이]

배열은 한번 생성하면 실행동안 그 길이를 바꿀 수 없다.”

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

Int tmp = arr.length; // arr.length의 값은 5이고 tmp에 5가 저장된다.

-> arr.length를 쓰는 이유 : 코드 변경에 유리함.

 

[배열의 요소 출력 시 배열의 길이 사용]

Int[ ] score = new int[5];

for(int i = 0 ; i < score.length; i++) { //score배열의 요소가 모두 출력된다.

           system.out.println(score[i]);

}

 

[배열의 초기화]

배열의 각 요소에 처음으로 값을 저장하는 것.

Int[ ] score = new int[5];

Score[0] = 50;

Score[1] = 60;

Score[2] = 70;

Score[3] = 80;

Score[4] = 90;

-> Int [ ] score = {50, 60, 70, 80, 90};

 

[배열의 출력]

Int[ ] iArr = {100,95,80,70,60};

System.out.println(iArr);                      //배열의 주소값 출력

 

for(int i=0; i < iArr.length; i++) {          //배열의 요소를 순서대로 하나씩 출력

System.out.println(iArr[i]);

}

System.out.println(Arrays.toString(iArr)); // 배열 iArr의 모든 요소를 출력한다. [100,95,80,70,60]이 출력된다.

 

 

[배열의 활용]

1. 총합과 평균

-> for문을 이용해서 배열에 저장되어 있는 값들을 모두 더한다.

-> 평균을 나눌 때 좀 더 올바른 값을 얻기 위해 형변환을 해주어야 한다.

(형변환을 하지 않고 int로 나누게 되면 소수점 아래가 생략된 값이 나오므로 어느 한쪽을 float로 형변환 해줘야 함.)

class Ex5_2 {

       public static void main(String[] args) {

             int   sum = 0    ;      // 총점을 저장하기 위한 변수

             float average = 0.0f; // 평균을 저장하기 위한 변수

 

             int[] score = {100, 88, 100, 100, 90};

 

             for (int i=0; i < score.length ; i++ ) {

                    sum += score[i];

             }

             average = sum / (float) score.length ; // 계산결과를 float 얻기 위해서 형변환

 

             System.out.println("총점 : " + sum);

          System.out.println("평균 : " + average);

       } // end of main

} // end of class

 

2. 최대값과 최소값

-> 최대값을 저장할 변수max와 최소값을 저장할 변수 min을 배열의 첫번째 값으로 초기화한다.

-> for문으로 배열의 두번째 요소부터 읽어서 비교한다. (첫번째 값은 초기화하면서 저장했으므로)

class Ex5_3 {

       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=1; i < score.length; i++) {

                    if(score[i] > max) {

                           max = score[i];

                    } else if(score[i] < min) {

                           min = score[i];

                    }

             } // end of for

 

             System.out.println("최대값 :" + max);      

             System.out.println("최소값 :" + min);      

       } // end of main

} // end of class

 

3.     섞기 (shuffle)

 

a.     배열에 0부터 9까지 담는다.

b.    반복문을 이용해서 0~9까지 섞는다.

for(int I = 0; i<100; i++) {         // 두 요소를 100번 바꾼다.

Int n = (int)(Math.random()*10);  // 0.0~0.9에서10을 곱하여야 0~9 중 한 값을 랜덤으로 얻을 수 있다.

Int tmp = 배열이름[0];             // 첫번째 요소를 임시변수에 넣고

배열이름[0] = 배열이름[n];       // 랜덤 값을 첫번째 인덱스에 넣는다.

배열이름[n] = tmp; // 임시변수에 있던 원래 첫번째 값을 랜덤 값의 자리에 넣는다.

}

System.out.println(Arrays.toString(배열이름));

 

[String 배열]

String[] name = new String[3];  // 3개의 문자열을 담을 수 있는 배열을 생성한다.

String은 참조형이기 때문에 배열 생성 시 null로 초기화 됨.

 

[커맨드라인 입력받기]

Scanner를 통한 입력뿐만 아니라 커맨드라인(cmd)에 입력도 가능.

공백을 구분자로 값을 줄 수 있음. Ex) abc 123 “Hello world”

“ ”빈문자열은 길이가 0, 자바에서는 길이가 0인 배열 가능함.

입력된 값들은 참조변수 args에 전달되어 문자열 배열을 생성함.

 

[2차원  배열]

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

Int[ ][ ] score = new int[4][3];  //43열의 2차원 배열을 생성한다. (4x3=12개의 저장공간 생성)

* 행의 인덱스는 0~3까지

* 열의 인덱스는 0~2까지

* 2차원 배열이란 결국 1차원 배열의 배열

* 1차원 배열의 참조변수들을 배열로 묶은 것

 

Int[ ][ ] score = {

                                {100, 100, 100},

                                {20, 20, 20},

                                {30, 30, 30},

                                {40, 40, 40}

                     };  //2차원 배열의 생성과 초기화를 동시에 함

 

[Arrays로 배열 다루기]

*배열의 출력*

Arrays.toString(배열이름) : 배열 저장 값을 문자열로 출력

Arrays.deeptostiring(배열이름) : 2차원 배열 저장 값을 문자열로 출력

 

*배열의 비교*

배열 비교는 비교 연산자 “==”를 사용할 수 없다.

왜냐면, “==”는 참조변수 값을 비교하는 것. 서로 주소가 같을 수 없기 때문에 false 값이 출력될 수 밖에 없다.

String[ ][ ] str2D = new String[ ][ ]{{“aaa”,”bbb”},{“AAA”,”BBB”}};

String[ ][ ] str2D2 = new String[ ][ ]{{“aaa”,”bbb”},{“AAA”,”BBB”}};

 

System.out.println(Arrays.equals(str2D, str2D2));        // false

-> 1차원 배열 등가비교 : Arrays.equals(배열이름1, 배열이름2)

System.out.println(Arrays.deepEquals(str2D, str2D2)); // true

-> 2차원 배열 등가비교 : Arrays.deepEquals(배열이름1, 배열이름2)

 

*배열의 복사*

배열의 복사는 copyOf( ), copyOfRange( ) 메서드를 사용

copyOf(배열이름, 복사할 요소의 갯수), copyOfRange( ) 에서 배열의 길이를 초과한 값을 입력하면 초과한 만큼 빈 값이 추가된다.

copyOfRange( ) 메서드에서 to는 범위에 포함되지 않는다.

Ex)

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

int[ ] arr2 = Arrays.copyOf(arr, arr.length);  // arr2=[0,1,2,3,4]

int[ ] arr3 = Arrays.copyOf(arr, 3);            // arr3=[0,1,2]

int[ ] arr4 = Arrays.copyOf(arr, 7);            // arr4=[0,1,2,3,4,0,0]

int[ ] arr5 = Arrays.copyOfRange(arr, 2, 4); // arr5=[2.3] <- 4(to)는 불포함

int[ ] arr6 = Arrays.copyOfRange(arr, 0, 7); // arr6=[0,1,2,3,4,0,0]

 

 

*배열의 정렬*

Arrays.sort( ) 메서드는 배열의 요소를 오름차순으로 정렬해준다.

 

Ex)

Int{ } arr = {3,2,0,1,4};

Arrays.sort(arr);                               // 배열 arr을 정렬한다.

System.out.println(Arrays.toString(arr)); // [0,1,2,3,4]

 

'꿈 : 멋진 개발자 🧸 > 자바의 정석' 카테고리의 다른 글

객체지향 프로그래밍 I  (0) 2022.05.02
Method 메서드  (0) 2022.04.29
연산자  (0) 2022.04.28
변수  (0) 2022.04.28
조건문과 반복문 (=제어문)  (0) 2022.04.28