在《疯狂Java讲义》中有一道题:通过API文档查询Math类的方法,打印如下图所示的圆:
请输入圆的半径(正整数):5
**
* *
* *
* *
* *
**
代码如下:
package com.lwb;
import java.util.Scanner;
public class Circle {
public static void main(String[] args) {
System.out.print("请输入圆的半径(正整数):");
Scanner in = new Scanner(System.in);
int radius=in.nextInt();
paint(radius); //圆半径
}
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) {
//解圆标准方程的
double t = Math.sqrt((r * r) - (y-r)*(y-r)); //求出(x-r) 圆的标准方程:(x-a)2+(y-b)2=r2;(a,b)为圆心
return (int) Math.round(r-t); //求圆左侧的X
}
//x等于多少,就加入多少个空格;也就是加入的空格数
public static String getSpace(int i) {
String s = "";
for (int j = 0; j < i; j++) {
s += " ";
}
return s;
}
}