Java言語プログラミングに関して質問です
以下の問いでソースを作りました。
問.2次元上の円と長方形を表すデータファイルが与えられたとき、以下の処理を行うプログラムを作成せよ。ただし、長方形は必ず座標軸に並行変を持つとする。
1.全図形の合計面積を表示せよ
2.一番面積の大きい図形データを表示せよ
3.周の長さ順に図形データを表示せよ
4.重なり合ってるすべての円のペアを列挙せよ
5.重なり合っているすべての図形のペアも列挙せよ
図形データの例
1. 1, 50.0, 50.0, 50.0
2. 2, -100.0, 100.0, 0.0, 0.0
3. 1, 0.0, 0.0, 10.0
4. 1, 50.0, 0.0, 30.0
5. 2, -75.0, 75.0, -25.0, 25.0
class Shape{
int id;
int type;
public double getArea() { return 0.0; }
public double getPerimeter() { return 0.0; }
}
class Circle extends Shape{
double cx,cy;
double r;
Circle(int id, int type, double cx, double cy, double r){
this.id = id;
this.type = type;
this.cx = cx;
this.cy = cy;
this.r = r;
}
public double getArea(){
return 3.14159265 * r * r;
}
public double getPerimeter(){
return 3.14159265 * 2 * r;
}
}
class Rectangle extends Shape{
double lx,ly,rx,ry;
Rectangle(int id,int type,double lx,double ly,double rx,double ry){
this.id = id;
this.type = type;
this.lx = lx;
this.ly = ly;
this.rx = rx;
this.ry = ry;
}
public double getArea(){
return (rx - lx) * (ly - ry);
}
public double getPerimeter(){
return 2 * (ly - ry) + 2* (lx - rx);
}
}
class ShapeTest{
public static void main(String[] args) {
Shape shapes[] = new Shape[5];
shapes[0] = new Circle(1, 1, 50.0, 50.0, 50.0);
shapes[1] = new Rectangle(2, 2, -100.0, 100.0, 0.0, 0.0);
shapes[2] = new Circle(3, 1, 0.0, 0.0, 10.0);
shapes[3] = new Circle(4, 1, 50.0, 0.0, 30.0);
shapes[4] = new Rectangle(5, 2, -75.0, 75.0, -25.0, 25.0);
double sum = 0.0;
for(int i=0;i<shapes.length;i++){
sum += shapes[i].getArea();
}
System.out.println("合計面積は " +sum);
Shape maxShape = shapes[0];
for(int i=1;i<shapes.length;i++){
if(shapes[i].getArea() > maxShape.getArea()){
maxShape = shapes[i];
}
}
System.out.println("一番面積の大きい図形は ID=" + maxShape.id);
for(int i=0;i<shapes.length-1;i++){
for(int j=i+1;j<shapes.length;j++){
if(shapes[j].getArea() > shapes[i].getArea()){
Shape tmp = shapes[i];
shapes[i] = shapes[j];
shapes[j] = tmp;
}
}
}
System.out.println("周の長さの大きい順は ");
for(int i=0;i<shapes.length;i++){
System.out.print(" " +shapes[i].id);
}
System.out.println();
}
}
//実行結果
合計面積は 23495.574275
一番面積の大きい図形は ID=2
周の長さの大きい順は
2 1 4 5 3
この問題ですが、周の長さの大きい順は2→1→5→4→3になり、問4、5ができていません。どうしたらよろしいですか?教えてください。解説とソースをお願いします。
お礼
有り難うございます。 お礼遅くなってしまって申し訳ありません。 それで確かに誤差がなくなりました。