You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 01:20:07