题目是这样的:《疯狂Java讲义》第3章第2题:通过API文档查询Math方法,打印出一个由星号组成的圆.
本人也是刚开始学习java,学了一段时间,基本 的语法差不多懂了,但是自己写程序感觉还是无从下手,看都这个题目,感觉自己应该可以的,但是想了一两个小时,然后打算先根据半径打印一个十字行,然后在补充边缘部分,最后实在是弄不出来,只好网上查资料,发现了网友的如下方法,就是根据圆的标准方程来的,贴在下面,算是做一个笔记吧。
package han;
import java.util.Scanner;public class Circle {
@SuppressWarnings("resource")
public static void main(String[] args) {
System.out.print("请输入圆的半径(正整数):");
Scanner in = new Scanner(System.in);
int radius=in.nextInt();
paint(radius); //半径40
}
public static void paint(int r) {
//假定圆心在坐标(r,r);
int y = r * 2; //y的坐标开始
int x = 0;
int c = 0; //中间空格数量
int z = 2; //每行递减量,因为在显示格内,竖行的距离差不多是横行距离的2倍
for (int j = r * 2; j >= 0; j=j-z) {
x = getX(r, y);
System.out.print(getSpace(x) + "*");
c = (r-x)*2;
System.out.println(getSpace(c) + "*");
y-=z;
}
}
public static int getX(int r, int y) {
//解圆标准方程的
int x = y - r;
double t = Math.sqrt((r * r) - (x * x));
return (int) Math.round(r-t);
}
public static String getSpace(int i) {
String s = "";
for (int j = 0; j < i; j++) {
s += " ";
}
return s;
}
import java.lang.Math;
}