1. 배열
하나의 공간에 여러개의 값을 담을 수 있음
단, "같은 자료형"의 값으로만 담을 수 있음.
1) 배열을 안썼을 경우
-변수 라는 것만 이용하게 되면 => 대량의 데이터들을 보관하고자 할 경우 각각의 변수를 만들어 따로 관리
int num1 = 0;
int num2 = 1;
int num3 = 2;
int num4 = 3;
int num5 = 4;
for(int i=1; i<=5; i++)
System.out.println(num+i); (X)
System.out.println(num1);
System.out.println(num2);
System.out.println(num3);
System.out.println(num4);
System.out.println(num5);
-총 합을 구할때도 일일이 더해줘야함 (반복문 활용 불가)
int sum = num1+num2+num3+num4+num5 ;
2) 배열을 사용할 경우
1. 배열 선언
2. 배열 할당 (몇개의 값을 보관할 것인지 크기 지정하는 과정 -> 그 갯수만큼의 방이 만들어짐)
3. 값 대입 (배열의 특정인덱스에 값을 대입)
4 .배열의 장점 : 반복문을 활용할 수 있음
for(int i=0; i<5;i++) {
System.out.println(arr[i]);
}
System.out.println(arr); //실제 arr에는 "주소값"이라는게 담겨있음
5. 배열의 특징
- 배열은 참조변수이다
실제 리터럴 값을 곧바로 담을 수 있는 변수를 일반 변수라고하고
주소값을 담고 있는 변수는 참조 변수 (레퍼런스 변수)라고 표현
- 기본 자료형(boolean,char,byte,short,int,long,float,double)으로 선언된 변수는
=> 실제 리터럴값을 바로 담는 변수 => 일반변수
- 그 외 자료형(int[], double[], char[], short[], .. String, Scanner, ..)으로 선언된 변수
=> 주소값을 담는 변수 => 참조변수 (레퍼런스 변수)
public void method4() {
int result = 0;
double d = 0.0;
int[] arr = null;
// 참조변수에 기본값은 null (아무것도 참조하고있지 않음)
// 주소값을 담는 레퍼런스 변수의 기본값은 null
System.out.println(arr); // null이 출력
//null인 상태로 메소드 호출하거나 어딘가에 접근하고자할 경우 오류발생
//=> NullPointerException
//System.out.println(arr.length); // java.lang.NullPointerException 오류: null인상태에서 뭔가에 접근했을시 생기는 오류
//System.out.println(arr[0]); //
6. 배열의 단점
int[] arr = new int[5];
arr = new int[7];
System.out.println("arr의 해쉬코드값 : "+arr.hashCode()); // 주소값 변경됨
연결이 끊긴 기존의 배열은 그어디에도 참조되고 있지않은 필요없는 존재가됨(Heap영역에 둥둥떠다님)
=> 일정 시간이 지나면 "가비지컬렉터(GC)"가 알아서 지워줌
=> 자바에서의 "자동메모리 관리" 특징!
배열을 강제로 삭제시키고자할 경우
=> 연결고리를 끊어주면 됨
arr = null;
7. 배열 사용예시
1) 10 크기인 배열을 선언하고 1~10까지의 수를 담기
public void method3() {
int[] arr = new int[10];
for(int i=0; i<arr.length;i++) {
arr[i]=i+1 ;
}
for(int i =0; i<arr.length;i++) {
System.out.println(arr[i]);
}
System.out.println("배열의 길이 : "+ arr.length);
System.out.println(arr); //배열의 자료형@ 배열의 주소값의 16진수 형태
System.out.println(arr.hashCode()); //주소값의 10진수 형태
}
public void method5() {
int[] arr = new int[5];
for(int i=0;i<arr.length;i++) {
arr[i]= 2 * (i+1);
}
for(int i=0;i<arr.length;i++) {
System.out.println(arr[i]);
}
>> 배열의 크기보다 더 큰 인덱스를 제시할 경우 ArrayIndexOutOfBoundsException 예외 발생
3) 크기 10 배열 생성하고, 반복문을 활용해서 0~100사이에 발생되는 랜덤값을 arr[x] : xx 형식대로 출력하기
public void method7() {
int[] arr = new int[10];
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.println("arr["+i+"] : "+ arr[i]);
}
}
4) 사용자에게 배열의 크기 입력받고 해당 크기만큼의 문자열 배열 생성 후 사용자에게 과일명을 입력받아 그 값을 인덱스 자리에 대입하여 출력
public void method8() {
Scanner sc = new Scanner(System.in);
System.out.print("배열의 길이 : ");
int size = sc.nextInt();
sc.nextLine();
String[] arr = new String[size];
for(int i =0; i<arr.length;i++) {
System.out.print("좋아하는 과일명: ");
arr[i] = sc.nextLine();
}
for(int i=0;i<arr.length;i++) {
System.out.println(arr[i]);
}
}
5) 사용자에게 문자열을 입력받은후 배열에 담은후 출력
public void method9() {
Scanner sc= new Scanner(System.in);
//1. 문자열 입력받기
System.out.print("문자열 입력: ");
String str = sc.nextLine();
//2. char배열 생성해두기(배열의 크기 == 문자열의 길이) //문자열의 길이 str.length()
char[] arr = new char[str.length()];
//3. 문자열에 각 인덱스별 문자를 char배열의 각 인덱스 자리에 대입
for(int i =0; i<arr.length;i++) {
arr[i] = str.charAt(i);
}
//4. 반복문을 활용해서 0~마지막 인덱스까지 값 출력
for(int i=0;i<arr.length;i++) {
System.out.println(arr[i]);
}
}
6) 크기 3 짜리 배열을 생성하고, 사용자에게 키값을 입력받아 출력, 평균키도 함께 출력하세요
public void method10() {
double[] arr = new double[3];
Scanner sc = new Scanner(System.in);
for(int i=0; i<arr.length;i++) {
System.out.print("키를 입력하세요: ");
arr[i] = sc.nextDouble();
}
double sum = 0.0;
for(int i=0; i<arr.length;i++) {
System.out.printf("%d번 학생의 키 : %.1fcm\n",i+1,arr[i]);
sum += arr[i];
}
System.out.printf("평균키 : %.2f ", sum / arr.length);
}
7) 사용자에게 배열의 길이를 입력받아 해당 크기만큼의 배열을 생성하고 1부터 100사의 랜덤값을 발생시켜 해당 인덱스의 값이 홀수인 값들의 총합을 구하기
public void method11() {
Scanner sc = new Scanner(System.in);
System.out.print("배열의 길이 : ");
int[] arr = new int[sc.nextInt()];
// 0~마지막 인덱스까지 매번 1~100사이의 랜덤값 대입
for(int i=0; i <arr.length;i++) {
arr [i] = (int)(Math.random()*100+ 1);
}
//0번~마지막 인덱스 까지 담긴값 출력, 해당 인덱스의 값이 홀수인 값들의 총 합 구하기
int sum = 0;
for(int i=0; i<arr.length;i++) {
System.out.println(arr[i]);
if(arr[i] % 2 ==1) {
sum+=arr[i];
}
}
System.out.println("홀수들의 총 합 : " +sum);
}
}
'JAVA' 카테고리의 다른 글
6_1. 객체란 (0) | 2022.10.26 |
---|---|
5_2. 배열의 복사(ArrayCopy) (0) | 2022.10.25 |
4_5. 제어문_ 분기문 continue (0) | 2022.10.21 |
4_5. 제어문_ 분기문 break (0) | 2022.10.21 |
4_4. 제어문 _ 반복문 while, do-while (0) | 2022.10.21 |