LostCatBox

Java 배우기 CH05

Word count: 828Reading time: 5 min
2022/12/23 Share

배열의 생성과 선언 배열을 인덱스

배열이란?

  • 배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
  • 저장 공간이 연속적임

Untitled

  • score라는 int배열이 생기고 인덱스로 접근가능함

배열의 선언과 생성

  • 배열의 선언 - 배열을 다루기 위한 참조변수의 선언
  • (변수는 선언하는 순간 생성되지만, 배열의 선언은 참조변수 선언.. 추후생성꼭 필요)

Untitled

  • score = new int[5] 하는 순간 int[5] 공간 메모리 주소확보되며, 이후 score라는 참조변수가 이 메모리 주소를 가르킴

배열의 인덱스

배열의 인덱스 - 각 요소에 자동으로 붙는 번호

Untitled

1
2
3
4
5
6
7
int[] score; //배열 스코어 선언
score = new int[5]; //배열 생성
score[2]=100;
System.out.println(score[2]);

// 한번에 가능함
int[] score = new int[5]; //배열 선언 및 생성

배열의 길이, 배열의 초기화

  • 배열이름.length - 배열의 길이(int형 상수)
  • 배열은 한번 생성하면 그 길이를 바꿀수 없다.
1
2
int[] score = new int[5]; //배열 생성
int tmp = score.length; //int 5가 저장된다
  • 배열 길이 바꿀수없는이유:
    배열은 메모리의 연속적인 공간이 필요한데, 만약 늘린다면, 다른곳으로 옮겨야한다. 따라서 막아놓음
  • 배열 부족하면?
    새로운것을 만들고 기존 배열에서 새걸로 옮겨야함

배열의 초기화

  • 배열의 각 요소에 처음으로 값을 저장하는 것
  • 배열은 자동으로 초기화됨 int>>0
1
2
3
4
5
6
7
int[] score = new int[3];
score[0] = 50;
score[1] = 50;
score[2] = 50;

int[] score = new int[]{50,60,70,80,90}; //초기화 방법1
int[] score = {50,60,70,80,90}; //초기화 방법2 90%이상이걸로사용

배열의 출력

1
2
3
4
5
6
7
8
9
10
11
12
13
int[] score;
score = new int[5];
System.out.println(score); //[I@61e4705b 출력됨. [:배열 I:int 의미 @:주소

//예외적으로 char 배열은 출력가능
char [] chArr = {'a','b','c','d'}; // abcd 출력
System.out.println(chArr);

for(int i=0;i<score.length;i++)
System.out.println(score[i]); //배열요소 출력

//배열 요소 출력 다른 방법
System.out.println(Arrays.toString(chArr)); //"[a, b, c, d]" 출

배열의 활용(총합과 평균)

1
2
3
4
5
6
7
8
int sum =0;
float avg =0;
int [] score = {100,88,100,100,90};
for (int i = 0; i < score.length; i++) {
sum +=score[i];
}
avg = sum/(float)score.length; //주의해야할것은 오른쪽항에대해서 무조건 float이여야
System.out.println(sum+"%n"+avg);

배열의 활용(최대값과 최소값)

Untitled

배열의 활용(섞기)

  • int tmp= ~~ 를 선언하면 선언+생성 되므로 메모리 저장됨.
1
2
3
4
5
6
7
8
9
10
11
12
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<100;i++) {
int n = (int)(Math.random()*10); //0~9까지 값 임의로 얻는다
int tmp = numArr[0]; // 중요한 개념
numArr[0]=numArr[n];
numArr[n]=tmp;
}
System.out.println(Arrays.toString(numArr));
}

Untitled

String 배열의 선언과 생성

  • String은 기본형아닌 참조형. 따라서 null값으로 초기화되어있다
  • 생성방법
1
2
String[] name = new String[]{"Kim","Park","vi"};
String[] name = {"Kim","Park","vi"};

Untitled

Untitled

  • 기본형이 아닌 참조형이므로, 원래는 해당 인덱스에 메모리에는 문자열 자체가 아닌 문자열이 저장된 메모리 주소를 담고있다.

커멘드 라인을 통해 입력받기

  • args 활용
1
2
3
4
5
6
public static void main(String[] args) {
System.out.println(args.length);
for(int i=0;i<args.length;i++) {
System.out.println("args["+i+"]=\""+args[i]+"\"");
}
}

2차원 배열

  • 데이터 형태의 데이터를 저장하기 위한 배열
1
int[][] score = new int[4][3]; //4행 3열의 2차원 배열을 생성한다.
  • 2차원 배열 초기화
1
2
3
4
5
6
7
int[][] arr = {{1,2,3},{4,5,6}}

//권장초기화 방법
int[][] arr={
{1,2,3},
{4,5,6}
}
  • 메모리 참조 그림(1차원배열이용하여 각 1차원배월 주소담음 구성)

Untitled

  • 참조 변수의 score의 각 요소는 score[0],score[1],score[2],score[3]이며
    이들 참조변수가 가르키는 배열은 각각 1차원배열로 존재
  • 1번째줄은 score[0]인 이름을 가진 배열이라고생각하면됨
  • 즉 이차원배열은 1차원배열의 배열임
  • 2차원 배열 접근 방식 아예 외우기
1
2
3
4
5
6
7
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]);

sum += score[i][j];
}
}

String 클래스

  • String클래스는 char와 메서드(기능)를 결합한것
    String클래스 = char[] + 메서드(기능)
  • String 클래스는 내용을 변경할 수 없다(Read Only)
  • 따라서 새로운 메모리에 결과값 할당후 a의 가르키는 주소를 변경

Untitled

String 클래스 주요 메서드

Untitled

1
2
String str = "ABCDE";
char ch = str.charAt(3); // 문자열 str의 4번째 문자 'D'를 ch에 저장

Arrays로 배열 다루기

  • 클래스

배열의 비교와 출력

  • equals(), toString(), deeptoString()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int[] arr = {0,1,2};
int[][] arr2D = {{1,2,3},{1,2,3}};
int[] arr2 = {0,1,2};
int[][] arr2D2 = {{1,2,3},{1,2,3}};

String[][] str2D = {{"aaa","bbb"},{"CCC","DDD"}};
String[][] str2D2 = {{"aaa","bbb"},{"CCC","DDD"}};


System.out.println(Arrays.toString(arr));
System.out.println(Arrays.deepToString(arr2D)); //2차원이상

System.out.println(Arrays.deepEquals(str2D, str2D2)); //ture
System.out.println(Arrays.equals(str2D, str2D2)); //참조변수 값이 다르므로 false

배열의복사

  • copyOf(), copyOfRange()

Untitled

  • 복사할 요소의 갯수, range범위벗어나면 나머지 0이 저장됨

배열의 정렬

  • sort()

Untitled

CATALOG
  1. 1. 배열의 생성과 선언 배열을 인덱스
    1. 1.1. 배열이란?
    2. 1.2. 배열의 선언과 생성
    3. 1.3. 배열의 인덱스
    4. 1.4. 배열의 길이, 배열의 초기화
    5. 1.5. 배열의 초기화
    6. 1.6. 배열의 출력
    7. 1.7. 배열의 활용(총합과 평균)
    8. 1.8. 배열의 활용(최대값과 최소값)
    9. 1.9. 배열의 활용(섞기)
    10. 1.10. String 배열의 선언과 생성
    11. 1.11. 커멘드 라인을 통해 입력받기
    12. 1.12. 2차원 배열
  2. 2. String 클래스
    1. 2.1. String 클래스 주요 메서드
  3. 3. Arrays로 배열 다루기
    1. 3.1. 배열의 비교와 출력
    2. 3.2. 배열의복사
    3. 3.3. 배열의 정렬