2016-04-08 7 views
0

変数の値を変更するかもしれないトリッキーな-Javaの

public void setSalary(MarriedPerson spouse){ 
if(getSex() != spouse.getSex()) { setSalary(getSalary() + spouse.getSalary()); 
} 
} 

それでは、私は、オブジェクトの変数給与の値を変更してやっていますオブジェクトが他のものと反対のセックスをしているとき(私はあなたがカップルであるかのように実際にそれらを追加しています)。とにかく起きているのは、最初のオブジェクトの給与が2つの給与の合計になり、メソッドの呼び出し後に給与が永久に変更されたということです。私がやりたいことはこれまでずっと変わっているのではなく、私がそれを印刷するだけです。だから、

MarriedPerson mp1 = new MarriedPerson("Tront", "Betty", 31, 980.5f,Person.FEMALE, 3); 
MarriedPerson mp2 = new MarriedPerson("Tront", "Kirk", 31, 2080f,Person.MALE, 2); 
MarriedPerson mp3 = new MarriedPerson("Tront", "Sonia", 31, 600f,Person.FEMALE, 0); 
mp1.printinfo(); 
mp2.printinfo(); 
mp3.printinfo(); 
//sal = mp1.getSalary(); 
mp1.setSalary(mp2); 
mp1.printinfo(); 
//mp1.setSalary(sal); 
mp1.setSalary(mp3); 
mp1.printinfo(); 
mp1.setSalary(mp2.getSalary()); 
mp1.printinfo(); 

を、私は、コマンドのコメントを外す場合は、プログラムが正常に動作しますが、私は何があっMP1オブジェクトの給与を別の値、SALを作成して保存される。ここでは、メインメソッドのコードです。そして、setSalaryメソッドを呼び出すことによって動作します。私はより適切な方法を望む、それは毎回動作する。

+0

これはこの質問の範囲外ですが、カップルは同じ性別である可能性があります。私はあなたが "夫婦"の定義を再考すべきだと思う。 – Dethariel

+0

よく、本当。私は先生に知らせる。 – FloatsAreFun

答えて

0

なぜ値を変更したくない場合は、最初にセッターを使用していますか?

適切な解決方法は、大きな写真が何であるかによって異なります。

結婚式を表現し、そのインスタンスを修正するために、新たにsetMarriedPerson()という既婚者を設定することができます。そして、後でprintCoupleInfo()のようなものを使用して結合値を出力します。

あなたが本当に給料の合計に興味があるなら、新しいcoupleSalaryフィールドがあなたのニーズに合うかもしれません。 (条件をcombinatingた場合の給与と同じに、あなたのsetCoupleSalary()に初期化に失敗し、合計は、それが保持している場合。

をまたはこの場合だけで、その後 `printCoupleSalary()」メソッドを提供し、それがあなたの主要な関心事で印刷するにはそれはそれに応じて別のMarriedPersonと出力を取得します。

+0

を除いて、コードが与えられ、私はそれをexcerise(college)のために使用しなければなりません。だから私はセッターを使用しなければならないと思う@rpy – FloatsAreFun

+0

しかし、それでは、あなたは何をするべきですか?ちょうどそれを見ることは確かではありません。したがって、 "固定"クラスのシグネチャか、メソッドの実装ですか?それとも、新しいフィールドを導入するはずですか? – rpy

+0

フィールドを変更しないで、合計を印刷する唯一の方法は、メソッドを使用して合計を印刷することです。 – rpy

0

を使用すると、オブジェクトの給与属性を変更したくない場合は、こちらsetSalary()メソッドを作成する必要はありません。

直接あなたが値を印刷することができますprintInfo()メソッド自体の中で条件が満たされた場合、2つの給与の合計になる給与の合計。

public void printInfo(MarriedPerson mp){ 
//code to print all the values 
....... 
....... 
//check if one is male and other female, then print their combined salary 
if(getSex()!=mp.getSex()) 
     System.out.println("Salary="+getSalary()+mp.getSalary()); 


} 

オブジェクトの給与額を更新せずに条件がtrueの場合、2つの給与の合計のみが出力されます。

関連する問題