更改变量的值可能很棘手-Java

时间:2016-04-08 17:15:05

标签: 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();

因此,如果我取消注释命令,程序工作正常,但我所做的是创建另一个值,sal并保存mp1对象的工资。通过调用setSalary方法,它可以正常工作。我想要一种更合适的方式,每次都有效。

1 个答案:

答案 0 :(得分:0)

当您不想更改值时,为什么首先使用setter?

正确的解决方案取决于你的大局。

您可以让已婚人士重新setMarriedPerson()来表达婚姻,并为该情况提供依据。然后使用printCoupleInfo()之类的东西输出组合值。

如果您真的只对组合薪水感兴趣,那么新的coupleSalary字段可能符合您的需求。 (在你的setCoupleSalary()上初始化为与组合条件失败时的工资相同,如果合并则为总和。

或者如果这个只是打印它是你的主要关注点,那么提供一个`printCoupleSalary()'方法来获取另一个MarriedPerson并相应地输出。