瘋狂Java講義 第三章 課后習(xí)題2
package Chapter_03;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Exercise_02 {
/**
* @param pot 定義一個(gè)二維數(shù)組盯滚,相當(dāng)與一個(gè) 2*rad x 2*rad 的二維坐標(biāo)系蹬昌,(rad,rad)為圓心的位置
* @param rad 半徑
*/
public void paint(int rad){
String[][] pot;//定義一個(gè)二維數(shù)組诵叁,表示一個(gè)二維坐標(biāo)系蹂匹,每一個(gè)元素將代表一個(gè)點(diǎn)的值
pot=new String[2*rad+1][2*rad+1];//為數(shù)組分配內(nèi)存空間,確定坐標(biāo)系的大小
//初始化這個(gè)二維數(shù)組
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);//打印一個(gè)點(diǎn)研叫,不換行
}
System.out.println();//每打印完一行,立刻換行,準(zhǔn)備打印下一行
}
}
/**
* 初始化數(shù)組中的每一個(gè)點(diǎn)媒峡,相當(dāng)于初始化二維坐標(biāo)系中每一個(gè)坐標(biāo)的值
* @param x 橫坐標(biāo)
* @param y 縱坐標(biāo)
* @param r 半徑
* @return 返回值代表(x,y)這個(gè)點(diǎn)的值
*/
public String initArray(int x,int y,int r){
String result=" ?";
double eps=0.1;//定義一個(gè)誤差范圍作為精度
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調(diào)出軟鍵盤,輸入英文分隔符葵擎,作為圓心
}
return result;
}
/**
* 主方法
* @param args
*/
public static void main(String[] args){
while(true){
try {
System.out.println("請(qǐng)輸入半徑:");
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("請(qǐng)輸入一個(gè)正整數(shù)作為半徑谅阿!");
} finally{
System.out.println();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
? ?
運(yùn)行結(jié)果: