모래시계 모양으로 배열을 만드는 예제입니다.
import blog.gui.PrintArray; public class Sandglass { public static void main(String[] args) { int[][] array = new int[5][5]; int value = 1; // 배열 각 칸마다 들어갈 값. 1씩 증가한다. int mid = (int) Math.ceil((double)array.length / 2); // ceil(올림) 내의 값은 double이어야 한다. array.length는 int형이다. // mid: 배열에서 세로(열)의 중간값. 5/2 = 3(☞2.5) // 상단 (첫 줄부터 mid까지) for(int row = 0; row < mid; row++) // 행 0, 1, 2 { // 0, .. < (5-0) → 0, 1, 2, 3, 4 // 열 (0, 1, 2, 3, 4)(1, 2, 3)(2) for(int col = row; col < (array.length - row); col++ ) { array[row][col] = value; arrayLog(row, col, array.length, value); value++; } } System.out.println(" "); // 하단 for(int row = mid; row < array.length; row++) // 행 3, 4 { for(int col = (array.length - 1) - row; col <= row; col++ ) // 열 (1, 2, 3)(0, 1, 2, 3, 4) { array[row][col] = value; arrayLog(row, col, array.length, value); value++; } } // 표시 new PrintArray(array); } private static void arrayLog(int row, int col, int arrayLength, int value) { System.out.println("row: " + row + " | (array.length - row): " + (arrayLength - row) + " | col: " + col + " | value: " + value ); } }
PrintArray는 Java Swing 예제: 다차원 배열 표시하기 (기초 설정 방법, for문으로 swing 요소 반복 등)을 참고해주세요.
순서도 상에서 col = 6 - row
인 값이 실제 프로그래밍시 col = 4 - row
가 되는데 왜 5가 아니라 4일까요? 순서도에서 6을 5로 바꾸면 (1,2,3)(0,1,2,3,4)
가 되는데 프로그래밍에서는 행도 0부터 시작하기 때문에 5-3=2
, 5-4=1
가 되어 프로그래밍상 배열과 맞지 않게 됩니다. 그러므로 프로그래밍에서는 행과 열 모두를 고려하여 2
를 뺀 4
가 되어야 합니다. 현재 row
번호가 0
부터 시작하므로 순서도에서 6 - 1 = 5
이나 프로그래밍상에서는 (6-1-1) - (5-1) = 0
이 되어야 하는 것이죠.
row: 0 | (array.length - row): 5 | col: 0 | value: 1 row: 0 | (array.length - row): 5 | col: 1 | value: 2 row: 0 | (array.length - row): 5 | col: 2 | value: 3 row: 0 | (array.length - row): 5 | col: 3 | value: 4 row: 0 | (array.length - row): 5 | col: 4 | value: 5 row: 1 | (array.length - row): 4 | col: 1 | value: 6 row: 1 | (array.length - row): 4 | col: 2 | value: 7 row: 1 | (array.length - row): 4 | col: 3 | value: 8 row: 2 | (array.length - row): 3 | col: 2 | value: 9 row: 3 | (array.length - row): 2 | col: 1 | value: 10 row: 3 | (array.length - row): 2 | col: 2 | value: 11 row: 3 | (array.length - row): 2 | col: 3 | value: 12 row: 4 | (array.length - row): 1 | col: 0 | value: 13 row: 4 | (array.length - row): 1 | col: 1 | value: 14 row: 4 | (array.length - row): 1 | col: 2 | value: 15 row: 4 | (array.length - row): 1 | col: 3 | value: 16 row: 4 | (array.length - row): 1 | col: 4 | value: 17
0개의 댓글