如何让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
相关产品推荐
相关产品推荐

