프로그래밍/java

[자바JAVA] 배열(Array)_ 1차원 배열

pupu91 2022. 7. 5. 23:39
반응형

배열

같은 자료형의 변수들을 하나의 묶음으로 다루는 것

배열은 저장된 값마다 인덱스 번호가 부여됨(0부터 시작)

 


 

1 . 배열의 사용 이유

 

  • 배열을 사용하지 않는다면 연속 된 메모리 공간으로 관리할 수 없고, 반복문을 이용한 연속적인 처리가 불가능하기 때문에 배열을 사용한다.

 

 

2 . 배열의 선언과 할당

 

배열 선언 배열 할당 배열 선언과 할당

자료형[] 배열명;

자료형 배열명 [];
배열명 = new 자료형[배열크기];

자료형[] 배열명 = new 자료형[배열크기];  

자료형 배열명[] = new 자료형[배열크기];

 

 

 

3.  배열 저장구조

 

 

  • 자료형[] 배열명;   stack에 배열의 주소를 보관할 수 있는 공간
  • new 자료형[배열크기];  heap 영역에 공간을 할당하고 발생한 주소값을 반환하는 연산자
  • 발생한 주소를 레퍼런스 변수(참조형 변수)에 저장하고 이것을 참조하여 사용하기 때문에 참조 자료형(reference type)이라고 한다.
  • heap영역은 값이 없는 공간이 존재 할 수 없으므로 처음 배열 선언 시 자료형별 기본값으로 초기화 된다. ex) int 0, double 0.0, String null, boolean false, char \u0000

 

 

 


배열의 사용 방법

 


 

1 .  배열 초기화 방법

 

(1) 인덱스를 이용한 초기화

int[] arr = new int[3]
arr[0] = 1;
arr[1] = 5;
arr[2] = 2;
for(int i = 0; i < arr9.length; i++) {
	System.out.print(arr9(i));
} length는 배열의 길이를 알 수있는 필드이다.(String의 length()와는 다름)

 

(2) for문을 이용한 초기화

for(int i = 0; i < arr.length; i++){
    arr[i] = i;
    }
Index가 순차적저으로 증가함에 따라 초기화 할 리터럴 값이 규칙적이라면
반복문을 통해 배열 초기화 가능

 

 

(3) 선언과 동시에 초기화

int[] arr = {1, 2, 3, 4, 5};
int[] arr = new int[]{1, 2, 3, 4, 5};
String fruit[] = {"사과", "포도", "참외"};

 

 

 

 

2 .  초기화 된 값 출력 

 

public static void main(String[] args)
int[] arr = {1,2,3,4,5};
System.out.println(arr)  
◆ 실행 결과
 [I@4361bd48
 
위와 같이 배열 변수를 출력하면 주소값이 나오기 때문에 
for문을 사용하여 배열의 값을 출력해주어야 한다.
(문자형은 char[]chArr ={a, b, c}; System.out.print(chArr); 로 출력 가능하다)

◎ for문을 사용하여 출력하기
  int[] arr = {1, 2, 3, 4, 5};
  for(int i = 0; i < arr.length; i++){
       System.out.print(arr[i]);
  }
◆ 실행 결과
12345

 

 

 

 

 

3 . 배열 사용시 주의사항

 

  • 배열을 할당할 시에는 반드시 배열의 크기를 지정해 주어야 한다.
int[] iarr = new int[5];
(x) int[] iarr = new int[]; 크기를 지정해 주지 않으면 에러 발생

 

  • 한 번 지정한 배열의 크기는 변경하지 못한다.

 

  • 한 번 할당된 배열을 지울 수 없지만 레퍼런스 변수를 null로 변경하면, 더 이상 주소가 참조되지 않은 배열은 일정 시간이 지난 후 heap의 old영역으로 이동하여 GC(가비지컬렉터)가 삭제시킨다. 한 번 찾아갈 수 있는 주소 값을 잃어버린 배열은 다시 참조 불가능하다. 아무것도 참조하지 않고 null이라는 특수한 값을 참조하고 있는 경우 참조 연산자를 사용하게 될때 java.lang.NullPointerException가 발행한다.

 

 

 


배열을 이용한 예제

 


반응형

 

  • 5명의 자바 점수를 정수로 입력 받아서 합계와 평균을 실수로 구하는 프로그램을 만들어보자
1. 5명 자바 점수를 저장할 배열 할당
int[]scores = new int[5]

Scannerr sc = new Scanner(system.in);

2. 반복문을 이용하여 배열 인덱스에 하나씩 접근해서 점수를 입력 받기
배열의 인덱스 범위를 넘어가는 호출을 했을 경우ArrayIndexOutOfBoundsException 발생하니 주의!

for(int i = 0; i < scores.length; i++){
     System.out.print((i+1) + "번째 학생의 자바 점수를 입력해주세요 : ");
     scores[i] = sc.nextInt();
     }
     
3. 합계와 평균 구하기
double sum = 0.0;
double avg = 0.0;

4. 합계는 모든 인덱스의 값을 sum변수에 누적해서 담아주기
for(int i = 0; i < scores.length; i++){
	sum += scores[i];
    }

5. 평균은 합계를 구한 값에서 배열의 길이(숫자)를 나누기
avg = sum / scores.length;
		
System.out.println("sum : " + sum);
System.out.println("avg : " + avg);

◇ 실행 결과
1번째 학생의 자바 점수를 입력해주세요 : 50
2번째 학생의 자바 점수를 입력해주세요 : 10
3번째 학생의 자바 점수를 입력해주세요 : 80
4번째 학생의 자바 점수를 입력해주세요 : 100
5번째 학생의 자바 점수를 입력해주세요 : 38
sum : 278.0
avg : 55.6

 

 

 

 

  • 랜덤한 카드를 한 장 뽑아서 출력해보자
1. 모양과 카드 숫자별로 값을 저장할 두 종류의 배열을 만들기
String[] shapes = {"SPADE", "CLOVER", "HEART", "DIAMOND"};
String[] cardNumbers = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "JACK", "QUEEN", "KING", "ACE"};

2. 배열 인덱스 범위의 난수 발생
int randomShapeIndex = (int)(Math.random() * shapes.length);
int randomCardNumberIndex = (int)(Math.random() * cardNumbers.length);

3. index를 이용해 출력하기
System.out.println("당신이 뽑은 카드는 " + shapes[randomShapeIndex] + " "
				+ cardNumbers[randomCardNumberIndex] + " 카드입니다.");
		
◇ 실행 결과
당신이 뽑은 카드는 DIAMOND 7 카드입니다.

 

 

 

반응형