java-배열

ezzange·2022년 8월 25일
0

java

목록 보기
8/16
post-custom-banner

배열

배열 (Array)

-동일한 자료형으로 선언된 변수를 메모리에 연속적으로 나열함으로써 관리의 효율성을 높인 메모리 사용 방식.

int kor, eng, math 와 같이 변수명이 각 각 달라 묶어서 사용하기 어렵다 이럴 경우 배열을 사용하여 나열할 수 있다.

int kor = 0, eng = 0, math = 0;

이름이 제 각각 다른 변수선언이

int[] q = new int[3];
// q[0] = kor, q[1] = eng, q[2] = math

배열을 통해 변수 선언이 될 수 있고

System.out.printf("국어 = ");
q[0] = in.nextInt();
System.out.printf("영어 = ");
q[1] = in.nextInt();
System.out.printf("수학 = ");
q[2] = in.nextInt();

이것 또한 문자형을 분리해보면

System.out.printf("국어 "+" = ");
q[0] = in.nextInt();
System.out.printf("영어 "+"= ");
q[1] = in.nextInt();
System.out.printf("수학 "+"= ");
q[2] = in.nextInt();

이렇게 분리하면 문자열만 다르고 나머지는 같은식이기에

String[] qname = new String[3]; 
qname[0] = "국어";
qname[1] = "영어";
qname[2] = "수학";

라는 식으로 줄일 수 있다. 그렇다면 출력식 또한 0,1,2만 다르고

System.out.printf(qname[0] +" = ");
q[0] = in.nextInt();
System.out.printf(qname[1] +" = ");
q[1] = in.nextInt();
System.out.printf(qname[2] +" = ");
q[2] = in.nextInt();

이는 반목문으로 줄일 수 있다. (Scanner - 키보드에서 과목 점수 정보를 받는다고 가정)

Scanner in = new Scanner(System.in);
int[] q = new int[3];
String[] qname = new String[3];
qname[0] = "국어";
qname[1] = "영어";
qname[2] = "수학";
		
for(int i= 0; i<=2; ++i) {
	System.out.print(qname[i] +" = ");
	q[i] = in.nextInt();	
}

혹은 이렇게 줄여지며 일부만 변경하면 예시는 3개지면 10개 20개 로 증가해도 코드의 변화는 없이 간편하게 할 수 있다. 이처럼 효율적으로 할 수 있는 방식 중 하나가 배열이다.

Scanner in = new Scanner(System.in);
int[] q = new int[3];// q[0] = kor, q[1] = eng, q[2] = math
String[] qname = new String[] {"국어", "영어", "수학" };
		
for(int i= 0; i<=2; ++i) {
	System.out.print(qname[i] +" = ");
	q[i] = in.nextInt();	
}
Scanner in = new Scanner(System.in);
int[] q = new int[5];// q[0] = kor, q[1] = eng, q[2] = math
String[] qname = new String[] {"국어", "영어", "수학", "과학", "사회" };
		
for(int i= 0; i<=4; ++i) {
	System.out.print(qname[i] +" = ");
	q[i] = in.nextInt();	
}

데이터의 저장위치

char[] a = {'a','b','c'};//stack 4byte
System.out.println(a[1]); //heep 2byte[0]...2byte[1]2byte..[3]

1차원 배열의 선언과 초기화

배열은초기화를 하지 않으면 사용할 수 없다.

char[] a = {'a','b','c'};
System.out.println(a[1]); 	
long b [];
b = new long[3]; //default 값으로 초기화
System.out.println(b[2]);`
int[] c;
c = new int[] {100, 200, 300, 400};
System.out.println(c[3]);

2차원 배열의 선언과 초기화

다차원배열은 가장 마지막 데이터 공간은 실제 데이터를 나타내고 중간의 있는 데이터는 참조용 데이터이기 때문에 마지막 데이터가 선언되기 직전까지는 사용할 수 없다.

char[][]a = {{'h','e','l','l','o'},{'A','B','C','D'},{'q','w','d'}};
//char[중괄호(행)의 개수][1번은 5 2번은4 3번은3]a //stack "a" 4byte
//a[0] --> 5, a[1]--> 4, a[2]--> 3
System.out.println(a[0]); // 기대값 hello
System.out.println(a[2][2]); // 기대값 d
		
long[] b [];//선언
b = new long[3][2];//초기화
//b[0] --> 2, b[0] --> 2, b[0] --> 2
//{{0, 0, 0},{0, 0, 0},{0, 0, 0}}
//값을 지정하지 않으면 기본적으로 0
System.out.println(b[2][1]); // 기대값 0
int c[][];
c= new int[][] {{1,2,3},{4,5,6},{7,8,9,10}};
//c[0] --> 3, c[1] --> 3, c[2] --> 4
System.out.println(c[1][1]); //기대값 5

앞쪽의 갯수만 정하고 뒤쪽의 데이터는 프로그램을 실행시키면서 할당시킬수 있도록 만드는 방식

Scanner in = new Scanner(System.in);
int[][] data = new int[3][];//data[0] --> ?,data[1] --> ?,data[2] --> ?
		
for(int i = 0; i<3 ; i++ ) {
	System.out.println("data의" + i + "번째 공간은 몇개를 만드시겠습니까나리?");
	int x = in.nextInt();
	data[i] = new int[x];
}
for(int i = 0; i<3; i++) {
	System.out.println("data[" + i + "]의 공간 개수 =" + data[i].length);
}

의 기대값은

data의0번째 공간은 몇개를 만드시겠습니까나리?
5(키보드 입력)
data의1번째 공간은 몇개를 만드시겠습니까나리?
6(키보드 입력)
data의2번째 공간은 몇개를 만드시겠습니까나리?
4(키보드 입력)
data[0]의 공간 개수 =5
data[1]의 공간 개수 =6
data[2]의 공간 개수 =4
post-custom-banner

0개의 댓글