トロイダル行列
/**
*
*
1 1 1
1 0 1
1 1 1
2 2 2 2 2
2 1 1 1 2
2 1 0 1 2
2 1 1 1 2
2 2 2 2 2
3 3 3 3 3 3 3
3 2 2 2 2 2 3
3 2 1 1 1 2 3
3 2 1 0 1 2 3
3 2 1 1 1 2 3
3 2 2 2 2 2 3
3 3 3 3 3 3 3
*
*/
public class SymmetricArray {
public static void main(String[] args) {
for (int n = 1; n < 10; n++) {
System.out.println();
SymmetricArray sa = new SymmetricArray();
sa.printArray(sa.populateArray(n), 2 * n + 1);
System.out.println();
}
}
private int[][] populateArray(int expectedNumber) {
int length = expectedNumber * 2 + 1;
int[][] array = new int[length][length];
for (int i = expectedNumber; i >= 0; i--) {
for (int j = expectedNumber - i; j < expectedNumber + i + 1; j++) {
array[j][expectedNumber - i] = array[expectedNumber - i][j] = i;
array[j][expectedNumber + i] = array[expectedNumber + i][j] = i;
}
}
return array;
}
/**
* 。
*
* @param array
* @param expectedNumber
*/
public void printArray(int[][] array, int expectedNumber) {
for (int i = 0; i < expectedNumber; i++) {
for (int j = 0; j < expectedNumber; j++) {
System.out.print(appendSpace(array[i][j], expectedNumber));
}
System.out.println();
}
}
/**
* , .
*/
private String appendSpace(int value, int expectedNumber) {
int maxValue = expectedNumber * expectedNumber;
int maxLength = String.valueOf(maxValue).length();
int currentValueLength = String.valueOf(value).length();
StringBuilder sb = new StringBuilder();
sb.append(value);
for (int i = maxLength; i > currentValueLength; i--) {
sb.append(" ");
}
sb.append(" ");
return sb.toString();
}
}
出力結果:1 1
1 0 1
1 1
2 2 2 2 2
2 1 1 1 2
2 1 0 1 2
2 1 1 1 2
2 2 2 2 2
3 3 3 3 3 3 3
3 2 2 2 2 2 3
3 2 1 1 1 2 3
3 2 1 0 1 2 3
3 2 1 1 1 2 3
3 2 2 2 2 2 3
3 3 3 3 3 3 3
4 4 4 4 4 4 4 4 4
4 3 3 3 3 3 3 3 4
4 3 2 2 2 2 2 3 4
4 3 2 1 1 1 2 3 4
4 3 2 1 0 1 2 3 4
4 3 2 1 1 1 2 3 4
4 3 2 2 2 2 2 3 4
4 3 3 3 3 3 3 3 4
4 4 4 4 4 4 4 4 4
5 5 5 5 5 5 5 5 5 5 5
5 4 4 4 4 4 4 4 4 4 5
5 4 3 3 3 3 3 3 3 4 5
5 4 3 2 2 2 2 2 3 4 5
5 4 3 2 1 1 1 2 3 4 5
5 4 3 2 1 0 1 2 3 4 5
5 4 3 2 1 1 1 2 3 4 5
5 4 3 2 2 2 2 2 3 4 5
5 4 3 3 3 3 3 3 3 4 5
5 4 4 4 4 4 4 4 4 4 5
5 5 5 5 5 5 5 5 5 5 5
6 6 6 6 6 6 6 6 6 6 6 6 6
6 5 5 5 5 5 5 5 5 5 5 5 6
6 5 4 4 4 4 4 4 4 4 4 5 6
6 5 4 3 3 3 3 3 3 3 4 5 6
6 5 4 3 2 2 2 2 2 3 4 5 6
6 5 4 3 2 1 1 1 2 3 4 5 6
6 5 4 3 2 1 0 1 2 3 4 5 6
6 5 4 3 2 1 1 1 2 3 4 5 6
6 5 4 3 2 2 2 2 2 3 4 5 6
6 5 4 3 3 3 3 3 3 3 4 5 6
6 5 4 4 4 4 4 4 4 4 4 5 6
6 5 5 5 5 5 5 5 5 5 5 5 6
6 6 6 6 6 6 6 6 6 6 6 6 6
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
7 6 6 6 6 6 6 6 6 6 6 6 6 6 7
7 6 5 5 5 5 5 5 5 5 5 5 5 6 7
7 6 5 4 4 4 4 4 4 4 4 4 5 6 7
7 6 5 4 3 3 3 3 3 3 3 4 5 6 7
7 6 5 4 3 2 2 2 2 2 3 4 5 6 7
7 6 5 4 3 2 1 1 1 2 3 4 5 6 7
7 6 5 4 3 2 1 0 1 2 3 4 5 6 7
7 6 5 4 3 2 1 1 1 2 3 4 5 6 7
7 6 5 4 3 2 2 2 2 2 3 4 5 6 7
7 6 5 4 3 3 3 3 3 3 3 4 5 6 7
7 6 5 4 4 4 4 4 4 4 4 4 5 6 7
7 6 5 5 5 5 5 5 5 5 5 5 5 6 7
7 6 6 6 6 6 6 6 6 6 6 6 6 6 7
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
8 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8
8 7 6 6 6 6 6 6 6 6 6 6 6 6 6 7 8
8 7 6 5 5 5 5 5 5 5 5 5 5 5 6 7 8
8 7 6 5 4 4 4 4 4 4 4 4 4 5 6 7 8
8 7 6 5 4 3 3 3 3 3 3 3 4 5 6 7 8
8 7 6 5 4 3 2 2 2 2 2 3 4 5 6 7 8
8 7 6 5 4 3 2 1 1 1 2 3 4 5 6 7 8
8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8
8 7 6 5 4 3 2 1 1 1 2 3 4 5 6 7 8
8 7 6 5 4 3 2 2 2 2 2 3 4 5 6 7 8
8 7 6 5 4 3 3 3 3 3 3 3 4 5 6 7 8
8 7 6 5 4 4 4 4 4 4 4 4 4 5 6 7 8
8 7 6 5 5 5 5 5 5 5 5 5 5 5 6 7 8
8 7 6 6 6 6 6 6 6 6 6 6 6 6 6 7 8
8 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
9 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9
9 8 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 9
9 8 7 6 6 6 6 6 6 6 6 6 6 6 6 6 7 8 9
9 8 7 6 5 5 5 5 5 5 5 5 5 5 5 6 7 8 9
9 8 7 6 5 4 4 4 4 4 4 4 4 4 5 6 7 8 9
9 8 7 6 5 4 3 3 3 3 3 3 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 2 2 2 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1 1 1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1 1 1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 2 2 2 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 3 3 3 3 3 3 4 5 6 7 8 9
9 8 7 6 5 4 4 4 4 4 4 4 4 4 5 6 7 8 9
9 8 7 6 5 5 5 5 5 5 5 5 5 5 5 6 7 8 9
9 8 7 6 6 6 6 6 6 6 6 6 6 6 6 6 7 8 9
9 8 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 9
9 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9
9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9