用java编程实现一个3×3的九宫格,将1至9的数字填入方格,使矩阵中心的元素为5,且每行每列及每个对角线的值相加都相同。
时间: 2024-10-11 07:10:43 浏览: 46
在Java中实现一个3x3的九宫格,满足条件即矩阵中心的元素为5,且每行、每列以及两个对角线的总和相等,可以按照以下步骤编写:
```java
import java.util.Arrays;
public class MagicSquare {
public static int[][] generate() {
int[][] square = new int[3][3];
// 设置中心元素为5
square[1][1] = 5;
// 初始化其他元素,首先保证每行、每列和两对角线的和为15 - 5 (因为中心是5)
int sum = 15 - square[1][1];
for (int i = 0; i < 3; i++) {
square[i][0] = sum / 3;
square[i][2] = square[i][0]; // 对角线1
for (int j = 1; j <= 2; j++) {
if (i != 1 || j != 1) { // 避免中心元素重复
square[j][i] = sum / 3;
}
}
}
// 检查并确保所有行、列和对角线的和都为15
boolean isValid = checkSum(square);
return isValid ? square : null;
}
private static boolean checkSum(int[][] square) {
int rowSum, colSum;
for (rowSum = 0; rowSum < 3; rowSum++) {
for (colSum = 0; colSum < 3; colSum++) {
rowSum += square[rowSum][colSum];
colSum += square[rowSum][colSum]; // 双重计算了中心元素,减去一次
}
// 对角线1和2的和
rowSum += square[0][0] + square[2][2];
}
// 如果所有和都等于15,则返回true,否则false
return Arrays.stream(new int[]{rowSum, colSum, rowSum, colSum}).allMatch(sum -> sum == 15);
}
public static void main(String[] args) {
int[][] magicSquare = generate();
if (magicSquare != null) {
for (int[] row : magicSquare) {
System.out.println(Arrays.toString(row));
}
} else {
System.out.println("无法生成符合条件的九宫格");
}
}
}
```
在这个程序中,我们先设定中心元素为5,然后计算出每行、每列和对角线的初始值,最后检查它们的和是否都为15。如果生成成功,`generate()`方法会返回这个3x3的九宫格数组;如果不成功,它将返回`null`。
阅读全文