请选择 进入手机版 | 继续访问电脑版
本站特色:极好的技术研究氛围!所有技术交流,必有回复!

疯狂Java联盟

 找回密码
 加入联盟
查看: 388|回复: 0

[疯狂Java讲义] 寻求代码优化

[复制链接]
发表于 2019-11-7 17:45:47 | 显示全部楼层 |阅读模式
以下为输出圆的代码,请各位亲不吝赐教:
//此篇代码为苦思冥想所得,所输出圆为近似值,没那么标准
//与习题中所要求输出的也不一样,而且初学
//此圆在半径较小是更为圆滑
public class 圆
{
      public static void main(String[] args)
      {
          //初始化半径r
          int r = 10;
          //使用for循环定义圆的纵坐标,其值为0——2r
          for (int i = 0;i < (2 * r + 1);i++)
          {
                //使用for循环定义圆的横坐标
                //由于命令窗口的行宽和字符宽度不一致,其值扩大2倍,为0——4r
                for (int j = 0;j < (4 * r + 1);j++)
                {
                      /*
                         根据勾股定理(r - i)^2 + (r - j)^2 = r^2,反向求
                         (r - j)^2 的值。
                       */
                      int x = r * r - (r - i) * (r - i);
                      //对求得的数值开平方,得到一个正数平方根,
                      //初始化平方根为单精度浮点数
                      float y = (float)Math.sqrt(x);
                      //在当前行圆的坐标前输出空格
                      //实际计算中将圆心横坐标与圆横坐标的差扩大为原来的2倍求绝对值
                      if (j < Math.round( 2 * r - 2 * y))
                      {
                            System.out.print(" ");
                      }
                      //在当前行的坐标处输出“*”
                      //实际计算中将圆心横坐标与圆横坐标的差扩大为原来的2倍求绝对值
                      else if (j == Math.round(2 * r - 2 * y))
                      {
                            System.out.print("*");
                            //如果是第一行,输出“*”后直接换行
                            if (i == 0)
                            {
                                  //输出换行转义字符
                                  System.out.print("\n");
                            }
                      }
                      //非首尾行时在第一个“*”后输出空格
                      //实际计算中将圆心横坐标与圆横坐标的差扩大为原来的2倍求绝对值
                      //圆输出到最后一行时y = 0,下段语句不运行
                      else if (j > Math.round(2 * r - 2 * y) & j < Math.round(2 * r + 2 * y))
                      {
                            System.out.print(" ");
                      }
                      //非首尾行输出第二个“*”后换行,并跳出循环
                      //实际计算中将圆心横坐标与圆横坐标的差扩大为原来的2倍求绝对值
                      //圆输出到最后一行是与第一个if语句一样但多了一个换行转义字符
                      else if (j == Math.round(2 * r + 2 * y))
                      {
                            System.out.print("*" + "\n");
                            break;
                      }
                }
          }
         
      }
}
您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

微信群请扫二维码
QQ交流1群:
545923995
(未满)

小黑屋|手机版|Archiver|疯狂Java联盟 ( 粤ICP备11094030号 )

GMT+8, 2020-4-2 11:39 , Processed in 0.224920 second(s), 6 queries , File On.

快速回复 返回顶部 返回列表