黑马程序员技术交流社区
标题:
一道简单的打印题
[打印本页]
作者:
王震阳老师
时间:
2012-9-23 10:23
提示:
该帖被管理员或版主屏蔽
作者:
尤圣回
时间:
2012-9-23 10:26
我写写看
作者:
尤圣回
时间:
2012-9-23 10:33
import java.math.BigDecimal;
public class Circle
{
/**
* 半径
*/
public int radius;
/**
* 一排点数 = 半径*2+1
*/
public double point;
public static void main(String[] args)
{
Circle circle = new Circle(6);
circle.show();
}
Circle(double dou)
{
radius = changeValue(dou);//四舍五入
point = radius*2 +1;//一排点数 = 半径*2+1
}
/**
* 打印圆
*
*/
private void show()
{
for(int i = 0;i<point;i++)
{
for(int j = 0;j<point;j++)
{
if(isCircle(j,i))
System.out.print(" *");
else
System.out.print(" ");
}
System.out.print("\n");
}
}
/**
* 判断某点是否是圆的点
* @return true:是;false:不是
*/
private boolean isCircle(int x, int y)
{
x = x-radius;
y = y-radius;
double temp = square(radius) - square(y);
int z = ((int)Math.sqrt(temp)); // 用圆的公式求星号离x轴的长度
if(x == z || x== -z)
{
return true;
}
else
{
return false;
}
}
/**
* 四舍五入
* @param dou double
* @return double
*/
public int changeValue(double dou)
{
BigDecimal bdBigDecimal = new BigDecimal(String.valueOf(dou)).setScale(0, BigDecimal.ROUND_HALF_UP);
return bdBigDecimal.intValue();
}
/**
* 求平方
* @param x int
* @return 平方值
*/
public double square(int x)
{
return (double)(x*x);
}
}
复制代码
作者:
王震阳老师
时间:
2012-9-23 10:41
解决的思路应该是把这个圆拆分成四分之一圆,剩下的都是对称的,用极坐标法,计算不同的“*”的位置。
作者:
王震阳老师
时间:
2012-9-23 11:45
尤圣回 发表于 2012-9-23 10:26
我写写看
C:\Documents and Settings\Administrator\桌面\1.jpg这是我运行的结果,不错。赞一个。
作者:
尤圣回
时间:
2012-9-23 11:51
我看不到你的
作者:
王震阳老师
时间:
2012-9-23 12:30
尤圣回 发表于 2012-9-23 11:51
我看不到你的
我不会截图上去呀
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2