참조형 변수와 객체
- 배열, 클래스, 인터페이스 등은 프로그램시 생성되는 '객체'이다.
- 객체의 변수는 객체 그 자체가 아니라 객체의 주소값만을 담는 '참조형 변수'가 된다.
int[] a = new int[5];
System.out.println("a ="+ a);
a = null;
System.out.println("a ="+ a);
결과
a =[I@2cfb4a64
a =null
- 첫 번째 변수 a의 값은 int형 배열의 첫 번째 요소의 주소값을 갖는다.
- a에 null값을 대입하면 주소값은 사라지고, 배열 객체는 그대로 남게 되는데, 이는 Java의 쓰레기처리기가 알아서 제거해준다.
final int[] a
배열 변수를 final로 설정하면 실수로 변수에 null을 대입하거나, 다른 배열에 대한 참조를 대입하는 실수를 방지할 수 있다.
2차원 배열
- 2차원 (2차원 이상의) 배열은 다음과 같은 형식으로 선언할 수 있다
int[][] a;
int[] a[];
int a[][];
6명의 두 과목 점수(국어, 수학)을 읽어 과목별 평균과 학생별 평균을 구하는 프로그램
import java.util.Scanner;
Scanner stdIn = new Scanner(System.in);
final int numOfStd = 6;
int [][] point = new int[numOfStd][2];
int[] sumStd = new int[numOfStd];
int[] sumSub = new int[2];
System.out.printf("%d 명의 국어, 수학 점수를 입력하세요.\n", numOfStd);
for(int i=0; i<numOfStd; i++) { // for1
System.out.printf("국어%d: ", i+1);
point[i][0] = stdIn.nextInt();
System.out.printf("수학%d: ", i+1);
point[i][1] = stdIn.nextInt();
sumStd[i] = point[i][0] + point[i][1]; // 학생 개인의 점수합
sumSub[0] = point[i][0]; // 국어 과목
sumSub[1] = point[i][1]; // 수학 과목
} // for1
System.out.println("No. 국어 수학 평균 ");
for (int i=0; i<numOfStd; i++) { //for2
System.out.printf(" %d %d %d %f \n", i+1, point[i][0], point[i][1], sumStd[i]/2.0);
} //for2
System.out.printf("평균 %f %f", (float)sumSub[0]/numOfStd, (float)sumSub[1]/numOfStd);
6 명의 국어, 수학 점수를 입력하세요.
국어1: 10
수학1: 20
국어2: 30
수학2: 40
국어3: 50
수학3: 60
국어4: 70
수학4: 80
국어5: 90
수학5: 100
국어6: 80
수학6: 60
No. 국어 수학 평균
1 10 20 15.000000
2 30 40 35.000000
3 50 60 55.000000
4 70 80 75.000000
5 90 100 95.000000
6 80 60 70.000000
평균 13.333333 10.000000
행에 따라 열의 개수가 다른 2차원 배열 생성
행에 따른 열 수가 다른 불규칙적인 배열을 만든다.
import java.util.Scanner
Scanner stdIn = new Scanner(System.in);
int numOfRow; // 행의 개
int[][] matrix;
System.out.println("서로 다른 열의 길이를 갖는 2차원 배열을 생성합니다.");
System.out.print("행의 개수를 입력하세요: ");
numOfRow = stdIn.nextInt();
matrix = new int[numOfRow][];
for(int i=0; i<numOfRow; i++) { //for1
System.out.printf("행 %d의 열의 개수를 입력하세요: ", i+1);
int col = stdIn.nextInt();
matrix[i] = new int[col];
} // for1
for(int i=0; i<numOfRow; i++){ //for2
for(int j=0; j<matrix[i].length; j++) { //for3
System.out.printf("%d행 %d열의 요소의 정수 값을 입력하세요: " , i+1, j+1);
matrix[i][j] = stdIn.nextInt();
} //for3
} //for2
System.out.println("입력한 행렬의 요소를 출력합니다.");
for(int i=0; i<numOfRow; i++){ //for4
for(int j=0; j<matrix[i].length; j++) { //for5
System.out.printf("%d ", matrix[i][j]);
} //for5
System.out.println();
} //for4
결과
서로 다른 열의 길이를 갖는 2차원 배열을 생성합니다.
행의 개수를 입력하세요: 3
행 1의 열의 개수를 입력하세요: 1
행 2의 열의 개수를 입력하세요: 3
행 3의 열의 개수를 입력하세요: 2
1행 1열의 요소의 정수 값을 입력하세요: 1
2행 1열의 요소의 정수 값을 입력하세요: 2
2행 2열의 요소의 정수 값을 입력하세요: 3
2행 3열의 요소의 정수 값을 입력하세요: 4
3행 1열의 요소의 정수 값을 입력하세요: 5
3행 2열의 요소의 정수 값을 입력하세요: 6
입력한 행렬의 요소를 출력합니다.
1
2 3 4
5 6
'Java > Java 기초' 카테고리의 다른 글
Java12 클래스 기본 (0) | 2020.05.13 |
---|---|
Java11 메서드(Method)와 오버로딩(overloading) (0) | 2020.05.12 |
Java9 문자열 배열 (0) | 2020.05.08 |
Java8 배열과 확장for문 (0) | 2020.05.07 |
Java7 기본 자료형과 연산 (0) | 2020.05.05 |