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

如何修改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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 12:36:00