Java生成特定模式方阵代码输出不符,寻求修正方案
修正思路与代码实现
首先分析预期矩阵的规律:
观察n=5和n=6的预期输出,矩阵关于水平中线和垂直中线对称,且每行的1的列范围遵循以下规则:
- 对于第
i行(从0开始计数):- 计算该行对应的边界值
k:如果i小于等于矩阵的中间行索引(mid = n/2,整数除法),则k = i;否则k = n-1-i(利用对称性复用上半部分的规则)。 - 当列索引
j满足j <= k或者j >= n-1-k时,该位置设为1,其余为0。
- 计算该行对应的边界值
基于这个规律,修正create方法的逻辑如下:
class Solution { /** * @param n the given positive number * @return the square matrix of order n according to the given pattern */ public static int[][] create(int n) { int[][] matrix = new int[n][n]; int mid = n / 2; for (int i = 0; i < n; i++) { // 根据当前行的位置计算边界k int k = i <= mid ? i : n - 1 - i; for (int j = 0; j < n; j++) { // 符合列范围的位置设为1 if (j <= k || j >= n - 1 - k) { matrix[i][j] = 1; } } } return matrix; } // Helper method to print the matrix public static void printMatrix(int[][] matrix) { for (int i = 0; i < matrix.length; i++) { for (int j = 0; j < matrix[i].length; j++) { System.out.print(matrix[i][j] + " "); } System.out.println(); } System.out.println("\n"); } public static void main(String[] args) { // Test cases int[][] result1 = create(5); printMatrix(result1); int[][] result2 = create(6); printMatrix(result2); int[][] result3 = create(1); printMatrix(result3); int[][] result4 = create(2); printMatrix(result4); } }
运行修正后的代码,输出将完全匹配预期:
- n=5时,行0仅两端为1,行1两端各两列为1,中间行全1,上下对称;
- n=6时,前两行的1列范围逐步扩大,中间两行全1,上下对称;
- n=1和n=2的输出保持符合预期的状态。
内容的提问来源于stack exchange,提问作者Orzibekov Yusufbek
相关产品推荐
相关产品推荐

