import java.util.Random;
class Main {
public static void main(String[] args) {
Random RD = new Random();
int DMax = 5;
//オリジナル・データ
int[][] Data = new int[DMax][DMax];
// ↑Dataは使わなくても可能、多少の修正は必要
//表示用データ
Integer[][] Synth = new Integer[DMax + 2][DMax + 1];
// ↑Integerはintのラッパークラス
int c, r, i;
//乱数データの生成
for (r = 0; r < DMax; r++) {
for (c = 0; c < DMax; c++) {
int rd = RD.nextInt(10);
// ↑RD.nextInt(10)の範囲は「0~9」であることに注意
Data[r][c] = rd;
Synth[r + 1][c] = rd;
}
}
//行の合計
for (r = 0; r < DMax; r++) {
for (c = 0; c < DMax; c++) {
if (Synth[r + 1][DMax] == null) Synth[r + 1][DMax] = 0;
Synth[r + 1][DMax] += Data[r][c];
}
}
//列の合計
for (c = 0; c < DMax; c++) {
for (r = 0; r < DMax; r++) {
if (Synth[DMax + 1][c] == null) Synth[DMax + 1][c] = 0;
Synth[DMax + 1][c] += Data[r][c];
}
}
//斜めの合計
for (i = 0; i < DMax; i++) {
if (Synth[DMax + 1][DMax] == null) Synth[DMax + 1][DMax] = 0;
Synth[DMax + 1][DMax] += Data[i][i];
if (Synth[0][DMax] == null) Synth[0][DMax] = 0;
Synth[0][DMax] += Data[DMax - 1 - i][i];
}
//表示
for (int sr = 0; sr < Synth.length; sr++) {
for (int sc = 0; sc < Synth[sr].length; sc++) {
if (Synth[sr][sc] == null) {
System.out.print(" ");
} else {
System.out.printf("%3d", Synth[sr][sc]);
}
}
System.out.println();
}
}
}