[Java] array(배열)
카테고리: Java
태그: coding Programming Java
array(배열)이란?
- 동일한 자료형의 묶음(연속된 메모리 공간에 값을 저장하고 사용하기 위한 용도)이다
- 배열은 heap 영역에 new 연산자를 이용하여 할당한다
- 배열 사용이유
- 만약 배열을 사용하지 않는다면 변수를 여러개 사용해야 한다
- 연속된 메모리 공간으로 관리할 수 없다(모든 변수의 이름을 사용자가 관리해야한다)
- 반복문을 이용한 연속 처리가 불가능 하다
package section01.array;
public class Application1 {
public static void main(String[] args) {
int num = 10;
int num1 = 20;
int num2 = 30;
int num3 = 40;
int num4 = 50;
int sum = 0;
sum += num;
sum += num1;
sum += num2;
sum += num3;
sum += num4;
System.out.println("sum = " + sum);
/* 배열의 선언 및 할당 */
int[] arr = new int[5];
/* 하나의 이름으로 관리되는 연속된 메모리 공간이고, 공간마다 찾아갈 수 있는 번호(인덱스)를 이용해 접근한다. */
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
arr[3] = 40;
arr[4] = 50;
/* 값을 대입할 떄도 반복문으로 사용할 수 있다. */
for(int i = 0,value = 0; i < arr.length; i++ ) {
arr[i] = value += 10;
}
/* 배열의 값을 누적해서 담을 변수 선언 */
int sum2 = 0;
/* 일반적인 변수처럼 사용할 수 있다. */
sum2 += arr[0];
sum2 += arr[1];
sum2 += arr[2];
sum2 += arr[3];
sum2 += arr[4];
System.out.println("sum2 = " + sum2);
int sum3 = 0;
for(int i = 0; i < arr.length; i++ ){
sum3 += arr[i];
}
System.out.println("sum3 = " + sum3);
}
}
- 출력값
sum = 150
sum2 = 150
sum3 = 150
배열의 사용방법을 익혀 배열을 사용할 수 있다 -배열의 사용방법
- 배열의 선언
- 배역의 할당
- 배열의 인덱스 공간에 값 대입
배열의 선언
- 자료형[] 변수명;
- 자료형 변수명[];
package section01.array;
import java.util.Scanner;
public class Application2 {
public static void main(String[] args) {
/*선언은 stack에 배열의 주소를 보관할 수 있는 공간을 만드는 것이다.*/
int[] iarr;
char carr[];
/*
* 선언한 레퍼런스 변수에 배열을 할당하고 대입할 수 있다
* new 연산자는 heap영엽에 공간을 할당하고 발생한 주소값을 반환하는 연산자이다.
* 발생한 주소를 래퍼런스 변수(참조형 변수)에 저장하고 이것을 참조하고 사용하고 있기 때문에 참조자료형에라고 한다.
* */
/*
* 배열을 할당 시에는 반드시 배열의 크기를 지정해주어야 한다.
* */
//iarr = new int[]; // 크기를 지정해주지 않아서 에러발생
iarr = new int[5];
carr = new char[10];
/*위의 선언이랑 할당을 동시에 할 수 도 있다.*/
int[] arr2 = new int[5];
/*위의 선언이랑 할당을 동시에 할 수 도 있다.*/
int[] arr = new int[5];
char carr2[] = new char[10];
/* heap 메모리는 이름으로 접근하는게 아니라 주소로 접근하는 영역이다.
* stack에 저장된 주소로 heap에 할당된 배열을 찾아갈 수 있다.
* */
System.out.println("iarr = " + arr2); //16진수 주소값
System.out.println("carr = " + carr2); //16진수 주소값
/*
* hashcode() : 일반적으로 객체의 주소값을 10진수로 변환하여 생선된 객체의 고유한 정수값을 반환한다
* 동일객체인지 비교할 때 사용할 목적으로 쓰이며 동등 객체를 동일 객체 취급하기 위해 오버라이딩해서 사용한다.
* */
System.out.println("arr2 = " + arr.hashCode());
System.out.println("carr2.hastCode() = " + carr2.hashCode());
System.out.println("arr2의 길이 : " + arr2.length);
System.out.println("carr의 길이 : " + carr2.length);
Scanner sc = new Scanner(System.in);
System.out.print("새로 할당할 배열의 길이를 입력하세요 : ");
int size = sc.nextInt();
double[] darr = new double[size];
System.out.println("darr의 hashcode : " + darr.hashCode());
System.out.println("darr의 길이 : " + darr.length);
darr = new double[30];
System.out.println("변경 후 darr의 hashcode : " + darr.hashCode());
System.out.println("변경 후 darr의 길이 : " + darr.length);
darr = null;
System.out.println("darr.length = " + darr.length);
}
}
- 출력값
iarr = [I@41629346
carr = [C@6d311334
arr2 = 1747585824
carr2.hastCode() = 1831932724
arr2의 길이 : 5
carr의 길이 : 10
새로 할당할 배열의 길이를 입력하세요 : 30
darr의 hashcode : 455896770
darr의 길이 : 30
변경 후 darr의 hashcode : 1323165413
변경 후 darr의 길이 : 30
Exception in thread "main" java.lang.NullPointerException: Cannot read the array length because "darr" is null
at com.ohgiraffers.section01.array.Application2.main(Application2.java:85)
배열이 초기화 되는 자료형별 기본값을 이해할 수 있다
- 값의 형태별 기본값
- 정수 : 0
- 실수 : 0.0
- 논리 : false
- 문자 : \u0000
- 참조 : null
public class Application3 {
public static void main(String[] args) {
int[] iarr = new int[5];
System.out.println("iarr[0] = " + iarr[0]);
System.out.println("iarr[1] = " + iarr[1]);
System.out.println("iarr[2] = " + iarr[2]);
System.out.println("iarr[3] = " + iarr[3]);
System.out.println("iarr[4] = " + iarr[4]);
for (int i = 0; i < iarr.length; i++) {
System.out.println("iarr[" + i + "]의 값 : " + iarr[i]);
}
/* 자바에서 지정한 기본값 외의 값을 초기화하고 싶은 경우 블럭을 이용한다.
* 블럭을 이용하는 경우에는 new를 사용하지 않아도 되며 값의 갯수만큼 자동으로 크기가 설정된다.
* */
int[] iarr2 = {11, 22, 33, 44, 55};
System.out.println("iarr2.length = " + iarr2.length);
for (int i = 0; i < iarr2.length; i++) { // 수정된 부분
System.out.println("iarr2[" + i + "]의 값 : " + iarr2[i]);
}
int[] iarr3 = new int[]{11, 22, 33, 44};
System.out.println("iarr3.length = " + iarr3.length);
String[] sarr = {"apple", "banana", "grape", "orange"};
for (int i = 0; i < sarr.length; i++) { // 수정된 부분
System.out.println("sarr[" + i + "]의 값 : " + sarr[i]);
}
}
}
배열을 사용하는 예시를 이해하고 적용할 수 있다
- 5명의 자바 점수를 정수로 입력받아서 합계와 평균을 실수로 구하는 프로그램을 만들어 보자
package section01.array;
import java.util.Scanner;
public class Application4 {
public static void main(String[] args) {
int[] scores = new int[5];
Scanner sc = new Scanner(System.in);
for(int i = 0; i < scores.length; i++){
System.out.print(( i+1 ) + " 번 째 학생의 자바점수를 입력해주세요 : ");
//1번째 부터 시작하기위해 i+1을 했다
scores[i] = sc.nextInt();
}
double sum = 0.0;
double avg = 0.0;
for(int i = 0; i < scores.length; i++){
sum += scores[i];
}
avg = sum / scores.length;
System.out.println("sum = " + sum);
System.out.println("avg = " + avg);
}
}
- 출력값
1 번 째 학생의 자바점수를 입력해주세요 : 20
2 번 째 학생의 자바점수를 입력해주세요 : 30
3 번 째 학생의 자바점수를 입력해주세요 : 40
4 번 째 학생의 자바점수를 입력해주세요 : 50
5 번 째 학생의 자바점수를 입력해주세요 : 60
sum = 200.0
avg = 40.0
배열을 사용하는 예시를 이해하고 적용할 수 있다
- 랜덤한 카드를 한장 뽑아서 출력해보자
package section01.array;
import java.util.Random;
public class Application5 {
public static void main(String[] args) {
String[] cardNumbers = {"2", "3", "4", "5", "6", "7", "8", "9", "10"};
String[] shapes = {"JACK", "QUEEN", "KING", "ACE"};
int randomShapeIndex = (int) (Math.random() * shapes.length);
int randomCardNumbers = (int) (Math.random() * cardNumbers.length);// 강제 형변환을 사용한 랜덤한 인덱스 생성
System.out.println("당신이 뽑은 카드는 " + shapes[randomShapeIndex] + " " + cardNumbers[randomCardNumbers] + " 입니다.");
}
}
- 출력값
당신이 뽑은 카드는 KING 5 입니다.
요약. 배열은 여러 데이터 요소를 하나로 모아서 저장하는 자료 구조입니다.
점점 재밌어지면서 복잡해지고 있다. 더 분발하자!!
댓글 남기기