참조변수하나의 공간에 여러개의 값을 담을 수 있는 개념
"같은 자료형의 값"으로만 담을 수 있다.
정확하게 애기하자면 배열의 각 인덱스 자리에 실제 값이 담긴(index는 0부터 시작)
변수만을 사용하게 된다면?
-> 대량의 데이터들을 보관하고자 할 때 각각의 변수를 만들어서 따로 관리해야한다.
heep메모리는 가변적이다 단,초기화 필수
String 초기화 = null
초기화 과정
int[] arr1 = new int[5]; arr1[0] = 0; arr1[1] = 1; arr1[2] = 2; arr1[3] = 3; arr1[4] = 4; int[] arr1 = {0,1,2,3,4};
1. 배열선언(여러개의 값들을 보관할 배열을 만들겠다. -> 참조변수 선언)
-자료형[] 배열이름; -자료형 배열이름[]; ex) int[] arr;2. 배열할당(이 배열에 몇개의 값들을 보관할건지 크기를 지정하는 과정)
-배열명 = new 자료형[배열의 크기(길이)]; ex) arr = new int[5]; //배열을 선언과 동시에 할당 int[] arr2 = new int[5];3. 값을 대입하고 가져와서 사용하기
-index를 이용해서 접근한다. ex) arr[0] = 10; arr[1] = 20; arr[2] = 30; arr[3] = 40; arr[4] = 50; for(int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } error) System.out.print(arr); //실제 arr이라는 값을 출력하면 arr의 정보(자료형+길 이+주소정보)같은 것들이 출력됨 -> 이상문구출력
배열의 가장 큰 단점
-한번 지정한 배열의 크기는 변경이 불가하다.
=>배열의 크기를 변경하고자한다면 다시 만들어야 한다.
-연결이 끊어진 기존 배열은 heap영역 에 둥둥 떠다닌다. (어떤 변수에도 참조되지 않는 상태, 불러올 수 없는 메모리)
=> 일정시간이 지나면 "가비지컬렉터(GC)"가 알아서 지워준다.
=>자바에서의 "자동메모리관리" 특징 -> 개발자가 코드에만 집중할 수 있다.
배열을 강제로 삭제시키고자 한다면 => 연결고리를 끊어주면 된다.(null대입)
arr = null;
int[] arr2 = {1,1,1,1,1};
int[] arr3 = {1,1,1,1,1};
System.out.println(arr2 == arr3);
//false => 각 참조변수는 ==을 통해서 비교시 주소값을 비교하기 때문에
arr3[0] = 100;
System.out.println(arr2[0]);
//true => arr3]배열과 arr2[]배열은 같은 배열을 가르키고 있기 때문에 arr3[0]값과 arr2[0]의 값은 같다.
배열 문제
1번 문제
1. 크기가 10인 정수형 배열 생성후 int[] arr = new int[10]; 2. 반복문을 통해서 0번 인덱스부터 마지막 인덱스까지 모든 값을 1로 초기화 `0~(배열열 길이 -1)까지 반복` for(int i =0; i < arr.length; i++) { arr[i] = 1; } 3. 반복문을 통해서 0~마지막인덱스까지 전부 출력 for(int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } 4. 사용자에게 배열의 길이를 입력받 해당크키의 문자열배열을 생성해라. ("길이 입력 : X") int size; System.out.print("길이 입력 : "); size = sc.nextInt(); String[] strArr = new String[size]; 5. 반복문을 활용해서 매번 사용자에게 과일명을 입력받아 그값을 strArr에 대입 (0~마지막인덱스) 좋아하는 과일을 입력 : 바나나(반복) for(int i = 0; i < strArr.length; i++) { Ststem.out.print("좋아하는 과일을 입력 : "); strArr[i] = sc.next(); } 6. 반복문을 이용해서 strArr에 있는 모든 값을 출력 for(int i = 0; i < strArr.length; i++) { System.out.println(strArr[i]); }출력 결과
1111111111 //1로 초기화한 arr[] 값 길이 입력: sc.nextInt(); //사용자가 입력한 값 좋아하는 과일을 입력 : 바나나 좋아하는 과일을 입력 : 바나나 좋아하는 과일을 입력 : 바나나 좋아하는 과일을 입력 : 바나나 좋아하는 과일을 입력 : 바나나 바나나 바나나 바나나 바나나 바나나
2번 문제
-사용자에게 문자열 하나 입력받은 후 -각각의 인덱스에 있는 문자들을 char배열에 옮겨담기1. 사용자에게 문자열 하나 입력받은 후 System.out.print("문자열 입력: "); String str = sc.next();//apple 2. char배열 생성하기(길이 => 문자열의 길이) char[] chArr = new char[str.length()]; 3. 반복문을 통해서 해당 문자열에서 각각 인덱스별 문자를 char배열에 각 인덱스값에 대입 for(int i = 0; i < chArr.length; i++) { chArr[i] = str.charAt(i); } 4. char배열의 모든 index값을 전체 출력 for(int i = 0; i < chArr.length; i++) { System.out.println(chArr[i]); }출력 결과
문자열 입력: apple apple
3번 문제
- 사용자에게 배열의 길이를 입력받아 해당 길이의 정수형배열 arr을 생성한다. - arr에 모든 인덱스값에 1~100사이의 랜덤값을 할당해주고 - arr에 모든 값을 출력한 후 - 이중 짝수인 값의 총 합을 구해서 출력System.out.print("정수 입력 : "); int size = sc.nextInt(); int sum = 0; int arr[] = new int[size]; for(int i = 0; i < arr.length; i++) { arr[i] =(int)(Math.random()*100) +1; } for(int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); } for(int i = 0; i < arr.length; i++) { if(arr[i] % 2 == 0) { sum += arr[i]; } } System.out.println(); System.out.print("짝수의 총 합 : " + sum);출력 결과
정수입력 : 3 //nextInt로 입력한 값 11 45 30 //1~100사이의 랜덤값 짝수의 총 합 : 30 //짝수인 값의 총 합