实现一个 City 类,表示城市,该类中的域为仅有的两个私有实例变量(单精度浮点类型),
用来表示该城市的位置坐标,不提供任何构造器,该类仅有五个方法,分别是:两个方法用来读取该城市的 x 坐标和 y 坐标,一个方法利用参数设定该城市的 x 坐标和 y 坐标,一个无参方法计算该城市与原点的距离(单精度浮点类型),一个名复用的方法计算该城市与参数(单精度浮点类型)表示的点的距离(单精度浮点类型);
要求 City 类实现一个接口 I,并且 City 类中的五个方法都在 I 中声明。
再实现一个用于测试的主类 TestCity,在其主方法中创建 1000 个City 对象(位置可任意),并存储在一个数组中,利用接口 I 定义一个引用指向该数组对象,利用该引用访问有关方法计算该数组中每个城市与原点的距离和并输出;将该数组理解为旅行路线,计算从起点(数组中第 0 个元素)城市到终点城市(数组中第 999 个元素)间的旅行路线长度并输出(所有距离的计算要求通过对 City 类中的方法调用完成)。
写出这三个类型的实现代码。
代码:
class City implements I{
private float x;
private float y;
public float getX(){
return x;
}
public float getY(){
return y;
}
public void setXY(float x,float y){
this.x=x;
this.y=y;
}
public float distance(){
return (float)Math.sqrt(x*x+y*y); //不加(float)会报错:不兼容的类型: 从double转换到float可能会有损失
}
public float distance(float x,float y){
float disx=x-this.x;
float disy=y-this.y;
return (float)Math.sqrt(disx*disx+disy*disy);
}
}
interface I{
float getX();
float getY();
void setXY(float x,float y);
float distance();
float distance(float x,float y);
}
class TestCity{
public static void main(String[] args){
City[] cities=new City[1000]; //初始化了一个大小为1000,City类型的数组,每个数组元素都为null
for(int i=0;i<cities.length;i++){
cities[i]=new City(); //不写这句:Exception in thread "main" java.lang.NullPointerException at TestCity.main
cities[i].setXY(i,i);
}
I[ ] icity=cities;
float sum1=0;
for(int i=0;i<icity.length;i++){
sum1+=icity[i].distance();
}
System.out.println(sum1);
float sum2=0;
for(int i=1;i<icity.length;i++){
sum2+=icity[i].distance(cities[i-1].getX(),cities[i-1].getY());
}
System.out.println(sum2);
}
}
代码(与上文相同,供方便复制):
class City implements I{
private float x;
private float y;
public float getX(){
return x;
}
public float getY(){
return y;
}
public void setXY(float x,float y){
this.x=x;
this.y=y;
}
public float distance(){
return (float)Math.sqrt(x*x+y*y);
}
public float distance(float x,float y){
float disx=x-this.x;
float disy=y-this.y;
return (float)Math.sqrt(disx*disx+disy*disy);
}
}
interface I{
float getX();
float getY();
void setXY(float x,float y);
float distance();
float distance(float x,float y);
}
class TestCity{
public static void main(String[] args){
City[] cities=new City[1000];
for(int i=0;i<cities.length;i++){
cities[i]=new City();
cities[i].setXY(i,i);
}
I[] icity=cities;
float sum1=0;
for(int i=0;i<icity.length;i++){
sum1+=icity[i].distance();
}
System.out.println(sum1);
float sum2=0;
for(int i=1;i<icity.length;i++){
sum2+=icity[i].distance(cities[i-1].getX(),cities[i-1].getY());
}
System.out.println(sum2);
}
}