疯狂Java讲义 第三章 课后习题2
package Chapter_03;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Exercise_02 {
/**
* @param pot 定义一个二维数组,相当与一个 2*rad x 2*rad 的二维坐标系,(rad,rad)为圆心的位置
* @param rad 半径
*/
public void paint(int rad){
String[][] pot;//定义一个二维数组,表示一个二维坐标系,每一个元素将代表一个点的值
pot=new String[2*rad+1][2*rad+1];//为数组分配内存空间,确定坐标系的大小
//初始化这个二维数组
for(int i=0;i<2*rad+1;i++){
for(int j=0;j<2*rad+1;j++){
String aPot=initArray(i,j,rad);
System.out.print(aPot);//打印一个点,不换行
}
System.out.println();//每打印完一行,立刻换行,准备打印下一行
}
}
/**
* 初始化数组中的每一个点,相当于初始化二维坐标系中每一个坐标的值
* @param x 横坐标
* @param y 纵坐标
* @param r 半径
* @return 返回值代表(x,y)这个点的值
*/
public String initArray(int x,int y,int r){
String result=" ";
double eps=0.1;//定义一个误差范围作为精度
if( Math.abs( Math.sqrt( ( Math.pow((x-r), 2) + ( Math.pow((y-r), 2)) ) ) - r ) < eps ){
result="*";
}
else if((x==r) && (y==r) ){
result="· ";//Ctrl+Shift+K调出软键盘,输入英文分隔符,作为圆心
}
return result;
}
/**
* 主方法
* @param args
*/
public static void main(String[] args){
while(true){
try {
System.out.println("请输入半径:");
Scanner input=new Scanner(System.in);
int r=input.nextInt();
//判断输入的半径是否合法
if(r>0 && r == ( (int) r) ){
System.out.println("圆的半径是:"+r);
Exercise_02 e2=new Exercise_02();
e2.paint(r);
break;
}
else{
throw new InputMismatchException();
}
} catch (InputMismatchException e) {
System.out.println("請輸入一個正整數作為半徑!");
} finally{
System.out.println();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
运行结果: