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

递归菱形打印方法格式不符合JUnit测试预期问题求助

递归生成菱形字符串的格式问题修正

你的代码能生成正确数量的星号,但格式混乱的核心原因是中间最长行被重复打印,且递归返回后的下半部分逻辑没有正确区分中间行。当i == n时,递归终止后依然执行了后半段的循环代码,导致中间行出现两次;同时递归拼接的逻辑让下半部分的行被错误嵌套,最终排版错位。

修正后的代码

public static String printRhombus(int i, int n) {
    StringBuilder sb = new StringBuilder();

    if (i > n) {
        return sb.toString();
    }

    // 打印当前行(上半部分及中间行)
    for (int j = 0; j < (n - i) / 2; j++) {
        sb.append(" ");
    }
    for (int j = 0; j < i; j++) {
        sb.append("*");
    }
    sb.append("\n");

    // 递归打印下一行,直到中间行
    if (i < n) {
        sb.append(printRhombus(i + 2, n));
        
        // 打印当前行的镜像(下半部分,排除中间行)
        for (int j = 0; j < (n - i) / 2; j++) {
            sb.append(" ");
        }
        for (int j = 0; j < i; j++) {
            sb.append("*");
        }
        sb.append("\n");
    }

    return sb.toString();
}

关键改动说明

  1. 避免中间行重复:把下半部分的行打印逻辑移到if (i < n)的判断内部,这样当i == n(中间最长行)时,不会重复输出该行。
  2. 保证对称顺序:递归调用完成后再打印当前行的镜像,确保下半部分是在上半部分(含中间行)全部打印完成后,按逆序输出对应行,完美实现上下对称。

测试示例

调用printRhombus(1, 5)会输出符合预期的菱形:

*
 ***
*****
 ***
  *

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 04:57:04