1

ソースコードを見てきましたが、何が問題なのかわかりません。問題は Circle クラスにあると思います。DriverCircle クラスからミューテーターとアクセサーを呼び出すと、間違った出力が返されます。getDiameter の場合は、0 を出力するだけです。

public class Circle{
    private double radius;  
    private double pi;
    private double diameter;
    private double circumference;
    private double area; 

    public Circle(){
        pi = Math.PI;
        radius = 0;
    }

    public Circle(double radius){
        this.radius = radius;
    }
    public void setDiameter(){
        diameter = (2 * radius);
    }
    public double getDiameter(){
        //diameter = 2 * radius;
        return diameter;
    }
    public void setCircumference(){
        circumference = (2 * pi * radius);
    }
    public double getCircumference(){
        //circumference = 2 * pi * radius;
        return circumference;
    }
    public double getArea(){
        //area = pi * Math.pow(radius, 2);
        return area;
    }
    public void setArea(){
        area = (pi * Math.pow(radius, 2));
    }
    public void setRadius(double radius){
        this.radius = radius;
    }
    public double getRadius(){
        return radius;
    }
    public String toString(){
        return "The radius is " + radius;
    }
}

(テスター)...

import java.util.Scanner;

public class CircleDriver {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        System.out.println("Please enter the radius: ");
        Circle[] circles = new Circle[10];
        Circle objectCircle = new Circle();
        objectCircle.setRadius(input.nextDouble());


        circles[1] = new Circle();
        circles[2] = new Circle(2.0);
        circles[3] = new Circle(3.5);
        circles[4] = new Circle(5.0);
        circles[5] = new Circle(0.0);
        circles[6] = new Circle(15);
        circles[7] = new Circle(25);
        circles[8] = new Circle(-7);
        circles[9] = new Circle(-10.0);

        System.out.println("Initial call to toString():");
        for (Circle c : circles)
            {System.out.println("\t" + c);}

        System.out.println("Call to getRadius (should be same as above):");
        for (Circle r : circles)
            {if (r != null)
                {System.out.println("\t" + r.getRadius());}}

        System.out.println("Call to getDiameter (should be twice the value shown above):");
        for (Circle d : circles)
            {if (d != null)
                {System.out.println("\t" + d.getDiameter());}}

        System.out.println("Calls to getCircumference:");
        System.out.println("\tShould be 2 * PI:  " + circles[1].getCircumference());
        System.out.println("\tShould be 0.0:  " + circles[5].getCircumference());

        System.out.println("\nCall to getArea:");
        System.out.println("\tShould be PI:  " + circles[1].getArea());
        System.out.println("\tShould be 0.0:  " + circles[5].getArea());

        System.out.println("Testing out the setRadius method:");
        for (int i = 0; i < circles.length / 2; i++)
            {if (circles[i] != null)
                {circles[i].setRadius(i);}}

        System.out.println("Call to toString after setting the first half of the objects:");
        for (Circle c : circles)
            {System.out.println("\t" + c);}
    }
}
4

6 に答える 6

2

セッター メソッドにはパラメーターが必要であり、パラメーターを使用してフィールドを設定する必要があります。それ以外の場合、実際には setter メソッドではありません。おそらく を除いて、現在のセッター メソッドはすべて破棄し、setRadius(...)ほとんどの計算はそれぞれのゲッター メソッドで行う必要があります。

つまり、そうではない

public void setCircumference(){
    circumference = (2 * pi * radius);
}

public double getCircumference(){
    //circumference = 2 * pi * radius;
    return circumference;
}

むしろ

public double getCircumference(){
    return 2 * Math.PI * radius;
}
于 2013-03-30T03:11:10.800 に答える
1

コンストラクターで値を指定すると、pi は初期化されません。さらに、pi をインスタンス メンバーとして格納するのは少し奇妙です。計算で Math.PI を使用するだけです。

于 2013-03-30T03:10:12.087 に答える
1

を呼び出すことはありませんsetDiameter()。コンストラクターは半径の値を設定しますが、直径変数の設定については何もしません!

あなたは単に書き直したいかもしれませんgetDiameter():

public double getDiameter() {
    return 2.0 * radius;
}
于 2013-03-30T03:10:30.637 に答える
0

半径を設定する Circle オブジェクトを作成しましたが、直径を設定していません。おそらくコンストラクターから setDiameter() を呼び出す必要があります。

さらに良いことに、 setDiameter() メソッドは完全に不要なので削除してください。getDiameter() が 2*radius を返すようにするだけです。

于 2013-03-30T03:12:22.970 に答える