如何修改Java代码实现半径为2的指定样式ASCII空心圆打印
问题根源
原代码无法输出目标效果,核心是三个适配问题:
- 没有适配终端字符的实际宽高比:常规终端单个字符的高度约为宽度的2倍,直接按1:1的横纵步长计算距离,会让视觉效果变形
- 横向网格范围不足:radius=2时,原代码仅遍历5列宽度,无法覆盖圆形横向的实际视觉范围
- 距离判断阈值没有随计算方式调整,导致打印星号的位置错位
调整后的实现
针对以上问题做如下修改:
- 横向遍历范围扩展到9列(从0到4*radius),匹配纵向2倍的视觉长度
- 距离计算时,将纵向坐标差乘以2,补偿终端字符的高宽比
- 调整星号打印的判断区间,让输出完全匹配目标形状
调整后的完整代码:
public class Main { public static void main(String[] args) { double dist; double radius = 2; int centerX = 2 * (int)radius; // 横向圆心位置,适配扩展后的横向范围 // 纵向遍历,和原逻辑一致,共2*radius+1行 for (int i = 0; i <= 2 * radius; i++) { // 横向遍历,范围扩展到4*radius,共4*radius+1列 for (int j = 0; j <= 4 * radius; j++) { // 计算距离:纵向坐标差乘以2,补偿终端字符高宽比 dist = Math.sqrt( Math.pow((i - radius) * 2, 2) + Math.pow((j - centerX), 2) ); // 调整判断区间,匹配目标输出的星号位置 if (dist > 2 * radius - 1.5 && dist < 2 * radius + 0.5) System.out.print("*"); else System.out.print(" "); } System.out.println(); } } }
代码运行后,输出和预期效果完全一致:
***** *** *** ** ** *** *** *****
内容的提问来源于stack exchange,提问作者jDeveloper
相关产品推荐
相关产品推荐

