1. 2차원 배열의 초기화
2. 2차원 배열에서의 length?
- 2차원 배열 변수가 참조하고 있는 곳이 행이기에, 행의 갯수가 나오게 된다.
(ex: arr.length)
- 열의 갯수는 해당 행의 길이를 가지고 쓰면 된다.
(ex: arr[0].length)
3. 2차원 배열의 길이를 이용하여 초기화하는 방법
4. 2차원 배열들을 향상된 for문을 통해서 합계 구하기.
5. 예제(1) - 좌표에 X 표하기.
import java.util.Scanner;
public class Exercise001 {
public static void main(String[] args) {
final int SIZE = 10;
int x = 0, y = 0;
char[][] board = new char[SIZE][SIZE];
board[0][0] = ' ';
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
};
for(int i=0; i<SIZE; i++) {
for(int j=0; j<SIZE; j++) {
board[i][j] = ' ';
}
}
// 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++) {
for(int j=0;j<SIZE;j++) {
System.out.printf("%c", board[i][j]);
}
System.out.println();
}
System.out.println();
}
} // main의 끝
}
( 처음 2차원 char 배열을 ' ' 공백을 초기화한 후, 출력해야 한다. )
6. 예제(2) - 빙고판 만들어보기.
import java.util.Scanner;
public class Exercise001 {
public static void main(String[] args) {
final int SIZE = 5;
int x = 0 , y = 0;
int num = 0;
int[][] bingo = new int[SIZE][SIZE];
Scanner scanner = new Scanner(System.in);
// 배열의 모든 요소를 1부터 SIZE*SIZE까지의 숫자로 초기화
for(int i=0;i<SIZE;i++) {
for(int j=0;j<SIZE;j++) {
bingo[i][j] = i*SIZE + j + 1;
}
}
// 배열에 저장된 값을 뒤섞는다.(shuffle)
for(int i=0;i<SIZE;i++) {
for(int j=0;j<SIZE;j++) {
x = (int)(Math.random() * SIZE);
y = (int)(Math.random() * SIZE);
// bingo[i][j]와 임의로 선택된 값(bingo[x][y])을 바꾼다.
int tmp = bingo[i][j];
bingo[i][j] = bingo[x][y];
bingo[x][y] = tmp;
}
}
do {
for(int i=0;i<SIZE;i++) {
for(int j=0;j<SIZE;j++)
System.out.printf("%2d ", bingo[i][j]);
System.out.println();
}
System.out.println();
System.out.printf("1~%d의 숫자를 입력하세요.(종료:0)>", SIZE*SIZE);
String tmp = scanner.nextLine(); // 화면에서 입력받은 내용을 tmp에 저장
num = Integer.parseInt(tmp); // 입력받은 문자열(tmp)를 숫자로 변환
// 입력받은 숫자와 같은 숫자가 저장된 요소를 찾아서 0을 저장
outer:
for(int i=0;i<SIZE;i++) {
for(int j=0;j<SIZE;j++) {
if(bingo[i][j]==num) {
bingo[i][j] = 0;
break outer; // 2중 반복문을 벗어난다.
}
}
}
} while(num!=0);
} // main의 끝
}
7. 예제(3) - 행렬곱 구현해보기.
import java.util.Scanner;
public class Exercise001 {
public static void main(String[] args) {
int[][] m1 = {
{1, 2, 3},
{4, 5, 6}
};
int[][] m2 = {
{1, 2},
{3, 4},
{5, 6}
};
final int ROW = m1.length; // m1의 행길이
final int COL = m2[0].length; // m2의 열길이
final int M2_ROW = m2.length; // m2의 행길이
int[][] m3 = new int[ROW][COL];
// 행렬곱 m1 x m2의 결과를 m3에 저장
for(int i=0;i<ROW;i++)
for(int j=0;j<COL;j++)
for(int k=0;k<M2_ROW;k++)
m3[i][j] += m1[i][k] * m2[k][j];
// 행렬 m3를 출력
for(int i=0;i<ROW;i++) {
for(int j=0;j<COL;j++) {
System.out.printf("%3d ", m3[i][j]);
}
System.out.println();
}
} // main의 끝
}