모래시계 모양으로 배열을 만드는 예제입니다.

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