0

シリンダーの容積を求める宿題をやっています。レッスンの対象は、クラスとオブジェクトです。「CylinderTest」と「Cylinder」の2つのクラスがあります。Cylinder テストは Cylinder を呼び出します。get メソッドと set メソッドを除いて、これまでのところすべてが機能しているようです。負の数の計算を防止しようとしていますが、これは機能せず、関係なく計算を実行します。

ここに CylinderTest クラスがあります

public class CylinderTest
{

    public static void main(String[] args)
    {
        Cylinder myTest = new Cylinder(-1, -1);
        myTest.getHeight();
        myTest.getRadius();
        System.out.println(myTest);

        printHeader();
        double volume = myTest.volume();
        displayCylinder(volume);
    }

    private static void printHeader()
    {
        System.out.println("Cylinder");
        System.out.println("________");
    }

    private static void displayCylinder(double volume)
    {
        System.out.print("Cylinder volume = ");
        System.out.println(volume);
    }
}

これがCylinderクラスです

public class Cylinder
{
    // variables
    public static final double PI = 3.14159;
    private double radius, height, volume;

    // constructor
    public Cylinder(double radius, double height)
    {
        this.radius = radius;
        this.height = height;
    }

    // Volume method to compute the volume of the cylinder
    public double volume()
    {
        return PI * radius * radius * height;
    }

    // accessors and mutators (getters and setters)
    public double getRadius()
    {
        return radius;
    }

    public void setRadius(double radius)
    {
        if (radius > 0.0)
            this.radius = radius;
        else
            this.radius = 1.0;
    }

    public double getHeight()
    {
        return height;
    }

    public void setHeight(double height)
    {
        if (height > 0.0)
            this.height = height;
        else
            this.height = 1.0;
    }

    public double getVolume()
    {
        return volume;
    }

    public void setVolume(double volume)
    {
        this.volume = volume;
    }

}
4

5 に答える 5

0

コンストラクターはセッターを呼び出す必要があり、セッターでロジックをチェックする必要があります。呼び出し元のコードが負の値を渡した場合、値 1 を使用して続行しますか?

于 2013-09-27T16:37:58.307 に答える
0

セッターメソッドは、まったく呼び出していないため、検証を行っていません。radius他の人がコメントしているように、値をandに直接割り当てるのではなく、コンストラクターでそれらを呼び出すことをお勧めしますheight

あなたがしたように円柱の属性を初期化すること自体は間違っていません。ただし、入力に対して「<=0」検証を実行する必要があり、セッターはすでにこれを実装しているため、それらを呼び出すのは簡単な解決策です。

あなたが探している結果には影響しないが、それでも私に飛びついたいくつかの追加のメモ:

  • ではTestCylinder、両方の getter メソッドを呼び出しますが、それらを何にも割り当てていません。ゲッターは値を返すため、ゲッターを単独で呼び出しても実質的に何も行われないことに注意してください。
  • また、では、getter メソッドを使用して円柱のボリュームを取得する代わりに、直接TestCylinder呼び出します。ここでは、ボリュームを計算するロジックを getter に配置してそのメソッドのみを使用するか、クラスの別の部分で後者が必要な場合に備えて getter call を使用することをお勧めします。Cylinder.volume()getVolumevolume()Cylinder
于 2013-09-27T17:53:40.033 に答える