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

如何让Java Rectangle类toString返回指定宽高的字符串矩形

解决方案

现有代码存在几个语法和逻辑错误:

  • 缺少接收宽高参数的构造方法,实例化Rectangle时无法正确传入width和height
  • makeTop方法中对tops变量循环做+=自身操作,会导致字符串长度指数级增长,远超出需求长度
  • makeSides方法存在变量先使用后定义、字符串和数值相乘的语法错误,Java不支持该类操作

Java 11及以上版本提供了String.repeat(int count)方法,用法和你熟悉的JavaScript中String.repeat完全一致,可以大幅简化拼接逻辑,修正后的代码如下:

修正后的Rectangle.java

public class Rectangle {
    private int width;
    private int height;

    // 新增构造方法接收宽高参数
    public Rectangle(int width, int height) {
        this.width = width;
        this.height = height;
    }

    @Override
    public String toString() {
        // 上下边框:空格 + 宽度个= + 换行
        String topBottom = " " + "=".repeat(width) + "\n";
        // 侧边行:| + 宽度个空格 + | + 换行,重复height次
        String sides = ("|" + " ".repeat(width) + "|\n").repeat(height);
        return topBottom + sides + topBottom;
    }

    // 补充缺失的getArea方法
    public int getArea() {
        return width * height;
    }

    // 补充缺失的getHeight方法
    public int getHeight() {
        return height;
    }

    // 可按需补充getWidth方法
    public int getWidth() {
        return width;
    }
}

低版本Java兼容方案

如果你使用的Java版本低于11,没有内置repeat方法,可以自行实现一个简易的重复拼接工具方法替代:

private String repeat(String str, int count) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < count; i++) {
        sb.append(str);
    }
    return sb.toString();
}

把toString里的"=".repeat(width)替换成repeat("=", width),其他repeat调用同理即可。

运行效果说明

  • 如果你要得到提问中贴的示例效果,创建实例时传入new Rectangle(3,4)即可
  • 你测试代码中创建的new Rectangle(10, 3)会输出如下结果:
==========
|          |
|          |
|          |
 ==========

完全符合你要求的字符串矩形样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:36:02