같은 자료형의 변수를 하나의 묶음으로 다루는 것
배열은 저장된 값마다 인덱스 번호가 0부터 시작하여 설정
자료형 [ ] 배열명;
자료형 배열명[ ];
자료형 [ ] 배열명 = new 자료형[배열크기];
자료형 배열명[ ] = new 자료형[배열크기];
// ex
int[] arr = new int[3];
int arr[] = new int[3];
배열은 참조 변수로 Heap영역에 할당되며 배열 공간의 주소를 저장
배열 공간의 주소를 이용해 인덱스를 참조하는 방식으로 값 처리
// ex
arr[0] = 1;
arr[1] = 2;
// ex
for(int i = 0; i < arr.length; i++) {
arr[i] = i;
}
// ex
int[] arr = {1, 2, 3, 4, 5};
int[] arr = new int[] {1, 2, 3, 4, 5};
String fruit[] = {"사과", "포도", "참외"};
* index가 순차적으로 증가함에 따라 초기화할 리터럴 값이
규칙적이라면 반복문을 통해 배열 초기화 가능
객체의 주소 값만 가져와 참조형 변수에 저장하고
하나의 객체를 두 변수가 참조하는 것
int[] arr1 = new int[4];
int[] arr2 = arr1;
새로운 배열 객체를 생성하여 기존 배열의 데이터를 복사하는 것
for(int i = 0; i < arr1.length; i++) {
arr2[i] = arr1[i];
}
System.arraycopy(arr1, 0, arr2, 0, arr1.length);
arr2 = Arrays.copyOf(arr1, arr1.length);
arr2 = arr1.clone();
public void ex1() {
// 변수 vs 배열
// 변수 선언
int num;
// stack 영역에 int 자료형을 저장할 수 있는 공간 4byte를 할당하고
// 그 공간에 num이라는 이름을 부여.
// 변수 대입
num = 10;
// 생성된 num이라는 변수공간에 10 이라는 값을 대입
// 변수 사용
System.out.println("num에 저장된 값 : " + num);
// num이 작성된 자리에 num에 저장된 값을 읽어와서 출력
// ---------------------------------------------------------
// 배열 선언
int[] arr; // int arr[];
// Stack 영역에 int[] 자료형 공간을 4byte 할당하고
// 그 공간에 arr 이라는 이름을 부여
// ** 해당 변수는 참조형으로 주소값만을 저장할 수 있다. **
// 배열 할당
arr = new int[3];
// new : "new 연산자"라고 하며
// Heap 메모리 영역에 새로운 공간(배열, 객체)을 할당
// int[3] : int 자료형 변수 3개를 하나의 묶음으로 나타내는 배열
// new int[3] : heap 영역에 int 3칸짜리 int[]을 생성(할당)
// arr = new int[3];
// int[] int[] -> 같은자료형 == 연산 가능
System.out.println("arr : " + arr); // [I@68fb2c38
// Heap 영역에 생성된 공간은 절대 비어있을 수 없다
// -> JVM 기본값이 들어가져있다
// boolean : false
// 나머지 : 0
// 참조형 : null
System.out.println( arr[0] ); // 0
System.out.println( arr[1] ); // 0
System.out.println( arr[2] ); // 0
// 배열 요소 값 대입
arr[0] = 10;
arr[1] = 50;
arr[2] = 1000;
System.out.println( arr[0] ); // 10
System.out.println( arr[1] ); // 50
System.out.println( arr[2] ); // 1000
// [10, 50, 1000] 실제로 arr 배열이 가진 모든 요소의 값을 알고싶다면..
System.out.println( Arrays.toString(arr) );
}
public void ex2() {
// 입력받은 값과 일치하는 값이 있으면 인덱스 번호 출력
// 없으면 "존재하지 않음" 출력
String[] arr = {"사과", "딸기", "바나나", "키위", "멜론", "아보카도"};
/*
* 과일 입력 : 아보카도
* 5번 인덱스에 존재
*
* 과일 입력 : 수박
* 존재하지 않음
*
*
* */
Scanner sc = new Scanner(System.in);
System.out.print("과일 입력 : ");
String input = sc.next();
boolean flag = false;
for(int i = 0; i < arr.length; i++) {
if( arr[i].equals(input) ) { // String 비교시 equals() 사용
System.out.println(i + "번째 인덱스에 존재");
flag = true;
}
}
if( !flag ) {
System.out.println("존재하지 않음");
}
}
public void ex3() {
// 1. 문자열을 입력받아 한 글자씩 잘라내어 char 배열에 순서대로 저장
// 2. 문자 하나를 입력받아 일치하는 문자가 char 배열에 몇개 존재하지는 확인
// 3. 단, 일치하는 문자 없을경우 "존재하지 않습니다" 출력
/*
* ex)
*
* 문자열 입력 : hello
[h, e, l, l, o]
검색할 문자 입력 : l
2개 있음 / 존재하지 않습니다
*
*
* */
// [사용해야하는 기술, 기능]
// 1) 배열 검색
// 2) String.length() : 문자열의 길이
// ex) "Hello".length() -> 5
// 3) String.charAt(index) : 문자열에서 특정 index에 위치한 문자 하나를 얻어옴.
// ex) "Hello".charAt(1) -> 'e'
// 01234
// 4 ) count (숫자세기)
Scanner sc = new Scanner(System.in);
System.out.print("문자열 입력 : ");
String input = sc.nextLine(); // hello world [h,e,l,l,o, ,w,o,r,l,d]
// 1. 문자열을 입력받아 한 글자씩 잘라내어 char 배열에 순서대로 저장
char[] arr = new char[input.length()];
for(int i = 0; i < arr.length; i++) {
arr[i] = input.charAt(i);
// arr[0] = 'h'
// arr[1] = 'e'
// arr[2] = 'l'
// arr[3] = 'l'
// arr[4] = 'o'
}
System.out.println( Arrays.toString(arr) );
// 2. 문자하나를 입력받아 일치하는 문자가 char 배열에 몇개 존재하는지 확인
System.out.print("검색할 문자 입력 : ");
char ch = sc.next().charAt(0);
// sc.next() -> String 형
// String.charAt(0) -> String의 0번째 인덱스 문자 하나를 추출해서 char 형태로 반환
// "h" -> 'h'
int count = 0; // 같은 글자 개수를 세기 위한 변수
for(int i = 0; i < arr.length; i++) {
if(arr[i] == ch) {
count++;
// arr[i] 값과 검색할 문자 ch 가 같은 경우
// 카운트 늘려라!
}
}
// 결과출력
if( count > 0 ) {
System.out.println(count + "개 있음");
} else {
// 3. 단, 일치하는 문자 없을 경우 "존재하지 않음" 출력
System.out.println("존재하지 않음");
}
}
}