2023. 1. 19. 10:28ㆍ개발일지
배열
- 배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것입니다.
- 많은 양의 값(데이터)을 다룰 때 유용합니다.
- 배열의 각 요소는 서로 연속적입니다.
배열의 선언과 생성
- 타입 또는 변수이름 뒤에 대괄호[]를 붙여서 배열을 선언합니다.
- 배열을 선언한다고 해서 값을 저장할 공간이 생성되는 것이 아니라 배열을 다루는데 필요한 변수가 생성됍니다.
배열의 선언
- 배열을 다루기 위한 참조변수의 선언
선언 방법 : 아래 두가지 방법 모두 지원
- 타입[] 변수이름;
- int[] age;
- String[] name;
- 타입 변수이름[];
- int age[];
- String name[];
배열의 생성 : 실제 저장공간을 생성
- 타입[] 변수이름 - new 타입[길이];
- age = new int[5]; (int 타입의 값 5개를 저장할 수 있는 배열을 생성)
배열의 인덱스
- 각 요소(저장공간)에 자동으로 붙는 일련 번호
- 인덱스(index)의 범위는 0부터 '배열길이-1'까지!
ex)
배열의 길이와 초기화
배열의 길이
- 배열이름.length
- 배열은 한번 생성되면 컴파일 후 실행되는 동안은 그 길이(크기)를 변경할 수 없습니다.
- 배열의 한계점
- new int[5];로 배열을 생성하면 int가 4byte이기 때문에 총 20byte를 저장하기 위한 연속적인 메모리 공간을 찾습니다.
- 연속적인 공간을 찾아서 주소를 배정합니다.
- 배정이 끝난 후 크기를 5가 아닌 10으로 늘려야 한다고 가정해 봤을 때 배정받은 주소 뒤에 20byte를 추가적으로 배정해야 하는데 뒤에 연속적인 메모리 공간이 존재한다는 보장이 없습니다.
- 따라서 크기를 바꿀 수 없습니다.
- 배열의 크기가 부족할 때의 방법
- 필요한 만큼의 그기의 배열을 새롭게 만듭니다.
- 새로 만든 배열에 기존 배열의 값을 복사해서 저장합니다.
배열의 초기화
- 배열의 각 요소에 처음으로 값을 저장하는 것을 의미합니다.
- 자동초기화
- 자동초기화
자료형(변수 타입) | 기본값 |
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
char | '\n0000' |
boolean | false |
참조형 변수(String or any Object) | null |
- 배열은 기본적으로 저장 하려는 값의 타입의 기본값으로 자동 초기화 해줍니다.
String 배열
String 클래스
- char[]와 메서드(기능)을 결합한 것입니다.
- 기본형처럼 사용이 가능한 참조형입니다.
- String str = "행복";
- String str = new String("행복");
- 문자열을 많이 사용하기 때문에 특별하게 만들어진 클래스입니다.
- String 클래스는 내요을 변경할 수 없습니다. 새로운게 만들어집니다.
- String name = "choi";
- String firstName = "wb";
- name = name + firstName;
- 기본형처럼 사용이 가능한 참조형입니다.
String 클래스의 주요 메서드
메서드 | 설명 |
char charAt(int index) | 문자열에서 해당 위치(index)에 있는 문자를 반환한다 |
int length() | 문자열의 길이를 반환한다. |
String substring(int from, int to) | 문자열에서 해당 범위(from~to)의 문자열을 반환한다. (to는 포함 안됨) |
boolean equals(Object obj) | 문자열의 내용이 같은지 확인한다. 같으면 true, 다르면 false |
char[] toCharArray() | 문자열을 문자배열(char[])로 변환해서 반환한다. |
String 배열의 선언과 생성
- String[] name = new String[3];
- 3개의 문자열을 담을 수 있는 배열을 생성한다.
- 참조형이기 때문에 기본값 null로 초기화 됍니다.
2차원 배열
- 테이블 형태의 데이터를 저장하기 위한 배열입니다.
- 2차원 배열의 선언과 생성
- int[][] score = new int[4][3];
- 4행 3열의 2차원 배열 score가 생성됩니다.
- int[][] score = new int[4][3];
- 2차원 배열의 초기화
- int[][] score = new int[][]{{}, {}, {}, {}};
- int[][] score = {{}, {}, {}, {}};
ex)
다차원 배열의 선언과 생성
- '[]'의 개수가 차원의 수를 의미합니다.
가변배열
- 다차원 배열에서 마지막 차수의 크기를 저장하지 않고 각각 다르게 지정합니다.
사용자 입력받기 - 커맨드라인
- 커맨드라인에서 입력된 값들은 문자열 배열에 담겨 main메서드에 전달된다.
사용자 입력받기 - 입력창(InputDialog)
- Swing패키지의 JOptionPane.showInputDialog()를 사용
Arrays
문자열 비교와 출력
- equals(), toString()
ex)
배열 복사
- copyOf(), copyOfRange()
ex)
정렬
- sort()
ex)
===========================================================================================
배열 문제 풀이 정리
1. 배열값끼리 더하기
int[] oneArray = new int[10];
for(int i = 0; i < arr.length; i++){
oneArray[i]= i+1;
}
2. 1칸씩 건너띄어서 넣기
for(int i = 0 i < oneArray.length; i+=2){
oneArray[i]=i;
}
3. 등차 수열 : 앞항 - 뒷항 = 값 이 일정하게 차이 = 공차 3 , 앞항 = 뒷항 + 3
oneArray = new int[20]; //위에서 선언한 new int[10] 접근 불가능
for(int i = 0 i < oneArray.length i++){
oneArray[i] = i !=0 ? oneArray[i-1] +3 : 1; // i값이 0이 아니고 1일때부터 계산
}
// 등비 수열 풀어보기
// 다차원 배열
int[][] twoArray = new int[4][4];
int cnt =1;
(i=열) for(int i = 0; i < twoArray.length; i++){ // 여기다가 cnt를 넣으면 4번밖에 반복을 안함
(j=행) for(int j = 0; j < .length; j++, cnt++){ // cnt를 16번 셀 경우
twoArray[i][j] =cnt;
}
}
향상된 for문
for(int[] ints : twoArray){
System.out.println("Arrays.toString(ints) = " = Arrays.toString(ints));
}
결과 값 :
{1,2,3,4}
{5,6,7,,,}
{9,10.,,,}
{13,14,15,16}
twoArray = new int[4][2]
int cnt =1;
(i=열) for(int i = 0; i < twoArray.length; i++){ // 여기다가 cnt를 넣으면 4번밖에 반복을 안함
(j=행) for(int j = 0; j < .length; j++, cnt++){ // cnt를 16번 셀 경우
twoArray[i][j] =cnt;
}
}
for(int[] ints : twoArray){
System.out.println("Arrays.toString(ints) = " = Arrays.toString(ints));
}
결과 값 : 오류 ( length가 아니라 길이로 잡아주어야합니다. )
// 3차원 배열
cnt =1; //초기화
int[][][] threeArray = new int[4][4][4];
for(int i = 0; i < threeArray.length; i++){ // 여기다가 cnt를 넣으면 4번 반복
(j=행) for(int j = 0; j < threeArray.length; j++, cnt++){ // cnt를 16번 반복
for(int k = 0; k < threeArray.length[i][j].length; k++, cnt++){ cnt를 64번 반복
threeArray[i][j][k] =cnt;
}
twoArray[i][j] =cnt;
}
}
'개발일지' 카테고리의 다른 글
01.25 TIL (0) | 2023.01.25 |
---|---|
01.19 TIL (0) | 2023.01.19 |
01.19 조건문과 반복문(WHILE문) (0) | 2023.01.19 |
01.19 조건문과 반복문(FOR문) (0) | 2023.01.19 |
01.19 조건문(IF, SWITCH)과 반복문 (0) | 2023.01.19 |