2012-03-13 9 views
1

私はかなりOOPに新しいので、どんな助けにも感謝しています。クラスファイルに合計を追加する

public class Triangle 
{ 
    private int base; 
    private int height; 
    private double area; 
    private String name; 
    private double totalArea = 0; 


    public void writeOutput() 
    { 
     System.out.println("Triangle name: " + name); 
     System.out.println("Triangle base: " + base); 
     System.out.println("Triangle height: " + height); 
     System.out.println("Triangle area: " + setArea()); 
     System.out.println("Total Area: " + totalArea); 
    } 

    private double setArea() 
    { 
     area = (base * height) * 0.5; 
     return area; 
    } 

    private double setTotalArea() 
    { 
     totalArea += area; 
     return totalArea; 
    } 
} 

私の問題は、setTotalArea()方法である:私はいくつかの入力を受け取り、そのようなのような三角形の面積を算出し、クラスファイルを持っています。基本的には、計算されたすべての領域の累計を加算することになっていますが、そのすべてが領域をエコーし​​ているため、その理由がわかりません。どんな提案も感謝しています!

答えて

1

セッターとゲッターが混ざっています。たとえば、setArea()メソッドは、プライベートであり、パラメータを受け付けず、何も設定せず、値を返そうとするため、真の「セッター」メソッドではありません - セッターが行うべきほとんどのこととは正反対です。あなたのsetTotalArea。

申し訳ありませんが、このコードはボルケーディングされていますので、これを取り除き、やり直すことをお勧めします(それはまだクラスの大きさではないので、これは大きな問題ではありません)。クラスのプロパティを設定するコンストラクタ、実際にパラメータを受け入れ、クラスフィールドを設定するためにこれらのパラメータを使用するtrueのパブリックセッタメソッドを使用します。次に、クラスフィールドの値を返すgetterメソッドを作成します。あなたのクラスはsetAreaメソッドまたはエリアフィールドを持っていてはいけません。エリアは計算値であり、設定値ではないから、おそらくgetArea()メソッドの現場で計算して返すべきです。

編集、あなたの状態:

私の問題はsetTotalArea()メソッドです。基本的には、計算されたすべての領域の累計を加算することになっていますが、そのすべてが領域をエコーし​​ているため、その理由がわかりません。どんな提案も感謝しています!

申し訳ありませんが、わかりません。どの地域の合計?クラスは1つの三角形しか記述していないため、ここでは累積面積概念はありません。今度は、トライアングルオブジェクトの配列またはコレクションを保持する別のクラスがある場合は、* * TotalArea(はに設定されます)メソッドを取得すると、コレクション内のすべての三角形の領域が追加されるため意味があります。ここにはこれがありません。

+0

私はこの課題に与えられたUMLダイアグラムに従おうとしていましたが、翻訳で何かが失われている可能性があります。上記の部分を除いてすべてが機能していました。 'setTotalArea()'が想定していたことは、計算されたすべての領域を加算することでした。たとえば、area1 = 3、area2 = 5、area3 = 8の場合、totalAreaは16(3 + 5 + 8)になります。 –

+0

それが動作しているかどうかに関わらず、それは完全に間違っています。そして、area1、area2、area3とは何ですか?申し訳ありませんが、これはまだ意味がありません。実際の割り当てテキストとUMLを間違って解釈する必要があるため、投稿することをお勧めします。 –

+0

さて、 'setTotalArea()'が何をすべきかの例として、これを使っています。いずれにしても、コードをやり直すことにします。ありがとう。 –

1

あなたの実行にはあまり明確ではありませんが、その場合は - Triangle t1 = new Triangle(); t1.setArea(); トライアングルt2 =新しいトライアングル(); t2.setArea();

以上は2つのオブジェクトです。上記の種類のオブジェクト作成を使用している場合は、両方のオブジェクトにsetAreaメソッドのコピーがあるため、累積合計を取得することはできません。

+0

はい、ドライバファイルに3つのオブジェクトが作成されています。何とか3つのオブジェクトの合計を見つける方法がありますか? –

+0

ドライバクラスに、三角形の配列を反復処理するメソッドを与えることによって、私はこれを私の答えですでに言った。 –

+0

実際に静的キーワードと呼ばれるものがあります。静的な変数は静的に作成し、次に領域メソッドの最後にあるすべてのオブジェクトインスタンスに静的intのように追加することができます。 areaSum = areaSum + totalarea ***静的なのは唯一の解決策ではなく、適切なコーディングのために静的な使用を避けなければなりませんが、参考までに、 –

関連する問題