Java实现从二维数组左下角到右上角填充图案的方法
问题描述
尝试用星号以特定图案填充二维数组,具体是从左下角填充至右上角。目前已实现左上角到右下角的效果,但从左下角到右上角时始终无法完成最后几个点。

尝试的代码
public static char[][] rightDiagonal (char star, int dimensions){ char [][] array = new char [dimensions][dimensions]; int last = dimensions - 1; // create variable for last number in array // for loop to create right diagonal pattern for (int i = 0; i < dimensions; i++){ for (int j = 0; j < dimensions; j++) if (i == j) array [i][last-i] = star; else array [i][j] = ' '; } return array; }
问题分析与修正
你的代码逻辑存在两处问题:一是判断条件错误,二是嵌套循环的赋值逻辑会覆盖正确位置的星号。要实现从左下角到右上角的对角线,核心判断条件应为行下标 + 列下标 = 数组长度 - 1(即i + j == last)。
修正后的代码如下:
public static char[][] rightDiagonal (char star, int dimensions){ char [][] array = new char [dimensions][dimensions]; int last = dimensions - 1; // 先初始化所有位置为空格 for (int i = 0; i < dimensions; i++){ for (int j = 0; j < dimensions; j++){ array[i][j] = ' '; } } // 填充左下角到右上角的对角线 for (int i = 0; i < dimensions; i++){ array[i][last - i] = star; } return array; }
也可以用更简洁的单循环写法:
public static char[][] rightDiagonal (char star, int dimensions){ char [][] array = new char [dimensions][dimensions]; int last = dimensions - 1; for (int i = 0; i < dimensions; i++){ for (int j = 0; j < dimensions; j++){ array[i][j] = (i + j == last) ? star : ' '; } } return array; }
逻辑说明:
- 当
i为最后一行(数组最下方)时,j为0(最左列),对应左下角;当i为0(最上方)时,j为last(最右列),对应右上角,两者都满足i+j=last的条件,能精准画出目标对角线。 - 先统一初始化空格再填充星号,避免内层循环覆盖已设置的正确星号位置。
内容的提问来源于stack exchange,提问作者GrasshopperAtBest
相关产品推荐
相关产品推荐

