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

C#构建星号金字塔时字符串右侧无padding问题求助

问题成因

  • 你对C#中PadLeft()/PadRight()方法的参数定义理解错误:这两个方法传入的参数是填充完成后字符串的总长度,不是你要额外追加的填充字符数量。比如你当前层星号字符串长度为1,调用PadLeft(2)只会在左侧补1个空格让总长度到2,再调用PadRight(2)时字符串总长度已经符合要求,不会在右侧追加任何内容,自然就出现只有左侧有填充的问题。
  • 总填充量的计算逻辑错误:每层需要的左右填充总和应该是「底层最大星号数maxStars - 当前层星号数numOfStars」,你现在写的maxStars - floorNum - 1的计算结果本身就不符合实际需要的填充总量。

修复方案

你可以直接通过拼接左右空格的方式实现,避免对Pad方法参数的理解误差,修复后的代码如下:

public class Kata
{
  public static string[] TowerBuilder(int nFloors)
  {
    string[] tower = new string[nFloors];
    int maxStars = 2 * nFloors - 1;
    for( int floorNum = 0; floorNum < nFloors; floorNum++ ) {
      int numOfStars = 2 * (floorNum + 1) - 1;
      int padding = (maxStars - numOfStars) / 2;
      tower[floorNum] = new string(' ', padding) + new string('*', numOfStars) + new string(' ', padding);
    } 
    return tower;
  }
}

如果你要继续使用Pad方法实现,正确写法应该是把最终总长度传入:

// 单条语句即可实现居中
string centeredFloor = floor.PadLeft(numOfStars + padding).PadRight(maxStars);

内容的提问来源于stack exchange,提问作者AYellowGalaxy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:27:03