2011-11-10 8 views
0

私は2つの数値を追加する電卓を実装していると言います。現在、入力された数のメンバ関数を返す/取るインスタンス変数

我々はこれまでに部分的な結果の記録を維持したいので、我々は2つのメンバ変数を維持する必要があり、oldNum部分的な結果のため、およびnewNum。

は現在、いくつかの点でoldNumにnewNumを追加し、oldNumに結果を格納addメソッドがあるでしょう。

newNumとoldNumの両方がメンバーのフィールドなので、私たちは、addメソッドで何かを渡したり返す必要はありません。一方

あなたがソースコードを読んで、あなたはvoidメソッドが発生した場合、これは奇妙に見えるかもしれないパラメータを指定せずに追加します。

私の質問は、メンバーフィールドにメンバー関数を渡す場合があるかどうかです。なぜ、流れるようなインターフェイスのために行くと、あなたのaddメソッドがこれを返す必要はありませ

class Calc { 

    int oldNum, newNum; 

    public void add1() { 
    oldNum = oldNum + newNum; 

    } 
public int add2(int n1, int n2) { 
     return n1 + n2; 
} 
+1

ああ、Javaの「すべてのものがオブジェクトである」哲学の至福;-) –

+1

また、あなたはどのように*長ったらしい気づく*のJavaの質問はありますか? Sheesh。その冗長性は、ユーザーの通常の発言に感染します。 (と私はそれが価値があるのは、Javaが好きです。) –

+2

よく質問はjavaとtodoを持っていません – user695652

答えて

2

、あなたがオブジェクトの内部状態を変更しています。アウトプットを提供する場合は、this、空白、または追加結果のコピーを返すことができます。

あなたが書いたADD2(...)メソッドは、インスタンス化するオブジェクトを必要としない静的メソッドとして実装する必要があります任意のメンバ変数を、使用していません。しかし、私はあなたがそれをここで必要とは思わない。

+0

を参照してください。しかし、関数にはメンバー変数が含まれておらず、静的に実装されていることを正当化していますか? – user695652

+0

必須条件ではありませんが、それで十分です。したがって、メンバーフィールドと変数を使用しない非静的メソッドを使用できますが、オブジェクトを使用する前にインスタンスを作成する必要があるため、通常は意味をなさないでしょう。 – 3martini

1

それは次のようになりますか?

public class Calculator { 
    private int runningTotal = 0; 
    public Calculator add(int value) { 
    runningTotal += value; 
    return this; 
    } 
} 

あなたの呼び出しコードは非常に上手く書くことができます(IMO)。

更新

あなたの呼び出し元のコードは、次の操作を行うことができますこの方法:何もここではvoidを返す程度奇妙ありません

Calculator calc = new Calculator(); 
int result = calc.add(x).subtract(y).divide(z).result(); 
+0

待って、なぜ私は "これ"を返すと思いますか? – user695652

+0

あなたは 'calc.add(4).add(8).subtract(3);' –

+0

@ user695652のようなことをすることができるので、 "this"を返すといいでしょう。 Psは私が更新していたように書かれたJacobMに感謝します! –

0

ここでやっていることは、電卓をどのように動作させるかという大きな問題だと思います。あなたは人が、このようなコマンドを入力することができる「スタックベース」のアプローチのために行っているように聞こえる:

12 11 + 

そのような場合、あなたのCalcのクラスは、おそらくのようなメソッドが必要です:

void pushNumber(int number); 
void add(); 

これは、それを扱っている典型的な開発者にとって混乱を招くことはありません。

関連する問題