1️⃣ 가변배열
2차원 이상의 다차원 배열을 생성할 때 전체 배열 차수 중 마지막 차수의 길이를 지정하지 않고, 추후에 각기 다른 길이의 배열을 생성함으로써 고정된 형태가 아닌 유동적인 가변배열을 구성할 수 있다.
예를 들어 아래와 같이 '5 X 3' 길이의 2차원 배열 score를 생성하는 코드가 있을 때,
int[][] score = new int[5][3]; //5행 3열의 2차원 배열 생성
위 코드를 다음과 같이 표현할 수 있다.
int[][] score = new int[5][]; //두번째 차원의 길이 지정X
score[0] = new int[3];
score[1] = new int[3];
score[2] = new int[3];
score[3] = new int[3];
score[4] = new int[3];
첫 번째 코드와 같이 배열을 생성하면 직사각형 테이블 형태의 고정적인 배열을 생성하는 것이고,
두 번째 코드와 같이 2차원 배열을 생성하면 아래와 같이 각 행마다 다른 길이의 배열을 생성하는 것이 가능하다.
int[][] score = new int[4][];
score[0] = new int[4];
score[1] = new int[3];
score[2] = new int[2];
score[3] = new int[2];
score[4] = new int[3];
위 코드에 의해 생성된 2차원 배열은 그림으로 표현하면 다음과 같다.
✅ 여기서 중요한 건 score.length의 값은 여전히 5지만,
일반적으로 2차원 배열과 달리 score[0].length의 값은 4이고 score[1].length의 값은 3이 된다.
✅ 가변배열도 중괄호를 이용해서 생성과 동시에 초기화가 가능하다.
int[][] score = {
{100, 100, 100, 100},
{20, 20, 20},
{30, 30},
{40, 40},
{50, 50, 50}
};
2️⃣ 예제
public class MultiArr1 {
public static void main(String[] args) {
final int SIZE = 10;
int x = 0, y = 0;
char[][] board = new char[SIZE][SIZE];
byte[][] shipBoard = {
// 1 2 3 4 5 6 7 8 9
{ 0, 0, 0, 0, 0, 0, 1, 0, 0 }, // 1
{ 1, 1, 1, 1, 0, 0, 1, 0, 0 }, // 2
{ 0, 0, 0, 0, 0, 0, 1, 0, 0 }, // 3
{ 0, 0, 0, 0, 0, 0, 1, 0, 0 }, // 4
{ 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 5
{ 1, 1, 0, 1, 0, 0, 0, 0, 0 }, // 6
{ 0, 0, 0, 1, 0, 0, 0, 0, 0 }, // 7
{ 0, 0, 0, 1, 0, 0, 0, 0, 0 }, // 8
{ 0, 0, 0, 0, 0, 1, 1, 1, 0 }, // 9
};
// 0행에 행번호를, 0열에 열번호를 저장한다.
for(int i=1;i<SIZE;i++)
board[0][i] = board[i][0] = (char)(i+'0');
Scanner scanner = new Scanner(System.in);
while(true) {
System.out.printf("좌표를 입력하세요.(종료는 00)>");
String input = scanner.nextLine(); // 화면입력받은 내용을 tmp에 저장
if(input.length()==2) { // 두 글자를 입력한 경우
x = input.charAt(0) - '0'; // 문자를 숫자로 변환
y = input.charAt(1) - '0';
if(x==0 && y==0) // x와 y가 모두 0인 경우 종료
break;
}
if(input.length()!=2 || x <= 0 || x >= SIZE || y <= 0 || y >= SIZE){
System.out.println("잘못된 입력입니다. 다시 입력해주세요.");
continue;
}
// shipBoard[x-1][y-1]의 값이 1이면, 'O'을 board[x][y]에 저장한다.
board[x][y] = shipBoard[x-1][y-1]==1 ? 'O' : 'X';
// 배열 board의 내용을 화면에 출력한다.
for(int i=0;i<SIZE;i++) {
System.out.println(board[i]); // board[i]는 1차원 배열
}
System.out.println();
}
} // main의 끝
}
참고자료 -
자바의 정석 3판
image -
아티스트가 디자인한 바꾸다 종의 무료 아이콘
무료 벡터 아이콘. SVG, PSD, PNG, EPS 형식 또는 아이콘 폰트 형태로 화살 수천 가지의 무료아이콘을 다운로드하세요 #flaticon #아이콘 #변화 #바꾸다 #여러가지잡다한
www.flaticon.com
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=1ilsang&logNo=220837557605 -가변배열
자바의정석 Chapter 5. 배열] Arrays.toString, 가변배열, 커맨드 입력, 배열의 복사
http://1ilsang.blog.me/220836651824 Hi!! 지금부턴 C와 좀 다릅니다. 자바만의 특성을 잘 느낄 수 있죠...
blog.naver.com
'Java' 카테고리의 다른 글
[Java] 문자형과 유니코드 (0) | 2023.04.13 |
---|---|
[Java] 자바로 프로그램 작성하기 (0) | 2023.04.06 |
[Java] 2차원 배열 (0) | 2023.03.28 |
[Java] 객체지향언어, 클래스, 객체 정리 (4) | 2023.01.05 |
[Java] JVM 메모리 구조 (0) | 2022.12.29 |