변수와 배열 / 1차원,2차원 배열, 가변길이 배열
변수와 배열
Q) 3개의 정수를 저장하기 위해 변수 3개를 만드는 방법?
1. 변수를 개별적(불연속)으로 만드는 방법
int a,b,c;
a=10;
b=20;
c=30;
a |
b |
c |
-> 데이터 처리가 복잡함
-> 데이터 이동이 어렵다
-> 데이터를 한 개만 저장가능 하다.
2. 변수를 연속적으로 만드는 방법 (Array, 객체)
int[] a = new int[3]
위는 변수 a 임
얘는 이렇게 이루어져 있음.
a[0] a[1] a[2]
배열의 길이 a.lenth = 3
얘네 하나하나 변수임
-> 많은 수의 변수를 만들기가 용이하다.
-> 기억공간 접근이 쉽다(반복문 사용가능)
-> 데이터 이동이 쉽다.
(데이터를 하나의 형태로 담아서 이동 가능함)
-> 서로 다른 데이터 타입을 저장할 수 없다.
(class랑 형태가 비슷한데, class는 다른 데이터 타입을 저장할 수 있음)
Array : 동일한 타입의 데이터를 여러 개 저장하기위한 연속적 메모리 구조
public class 데이터 이동 비교 {
public static void main(String[] args) {
// 4. 데이터를 이동하라 (변수 VS 배열)
int a, b, c;
a = 10;
b = 20;
c = 30;
// a+b+c = ? 메서드 처리-> hap()
hap(a, b, c);
// 만약, 데이터가 3개가 아니라 10개,30개 라면?
// 변수 선언 하나하나 다 해주고 매개변수 하나하나 다써주고.... 매우 번거롭고 귀찮음
// 좀 더 효율적으로 하기위해 하나의 구조로 묶어서 이동시킨다 => Array
int[] arr = new int[3];
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
hap1(arr);
}
public static void hap(int a, int b, int c) {
int sum = a + b + c;
System.out.println(sum);
}
public static void hap1(int[] x) {
// 반복문 활용할 수 있다 - for, while
int sum = 0;
for (int i = 0; i < x.length; i++) {
sum += x[i];
}
System.out.println(sum);
}
}
1차원, 2차원 배열
1차원 Array
int[] a = new int[3]
위는 변수 a 임, 아래 그림은 a가 메모리에 저렇게 저장된다는 ...
a[0] a[1] a[2]
=> int[] / int가 여러개인 구조
2차원 Array
int[][] a = new int[3][4]; ( [3][4] => 3행 4열 )
1차원 배열이 여러개로 된 형태라고 생각하면 쉽다.
위의 저것이 메모리에는 어떻게 저장이 되냐면.....
이렇게 차곡차곡 저장이 됨.
+ a.lenth = 3
a[0].lenth = 4
a[1].lenth = 4
a[2].lenth = 4
가변길이 배열
int[][] a = new int[3][] ;
a[0] = new int[3] ;
a[1] = new int[4] ;
a[2] = new int[5] ;
public class 배열 {
public static void main(String[] args) {
// 9개의 정수형 변수를 만들어라-> 2차원 구조로
// ex) 행렬구조, 게임(맵) ....
int[][] b = new int[3][3];
b[0][0]=1;
b[0][1]=2;
b[0][2]=3;
b[1][0]=1;
b[1][1]=2;
b[1][2]=3;
b[2][0]=1;
b[2][1]=2;
b[2][2]=3;
for(int i=0; i<b.length; i++) {
for(int j=0; j<b[i].length; j++) {
System.out.print(b[i][j]+ "\t");
}
System.out.println();
}
// 아래 처럼 출력됩니다
// 1 2 3
// 1 2 3
// 1 2 3
// 가변길이 배열
// *
// **
// ***
// ****
// 만들어 보기
int[][] star = new int[4][];
// star[n] 에 1차원 배열을 생성해준다. 로 이해할 것.
star[0] = new int[1];
star[1] = new int[2];
star[2] = new int[3];
star[3] = new int[4];
for(int i=0; i<star.length; i++) {
for(int j=0; j<star[i].length; j++) {
star[i][j]='*';
// 문자같은 경우 아스키코드로 나오기 때문에
// System.out.print(star[i][j]);
System.out.print((char)star[i][j]);
}
System.out.println();
}
}
}