根据工资,我需要为员工对象分配一个特定的税率。工资由annualSalary定义,这是一个double,所以我不能使用switch语句。我改为使用if / else:
public int getSalaryRank() {
if(yearlySalary <= 60000.00) {
salaryRank = 1;
} else if(yearlySalary > 60000.00 && yearlySalary <= 80000.00) {
salaryRank = 2;
} else if(yearlySalary > 80000.00 && yearlySalary <= 100000.00) {
salaryRank = 3;
} else if(yearlySalary > 100000.00 && yearlySalary <= 125000.00) {
salaryRank = 4;
} else {
salaryRank = 5;
} return salaryRank; }
我将根据排名稍后分配税率。有没有更好的方法来写这个?
答案 0 :(得分:4)
考虑在列表或(薪水)限制数组中使用while
循环。
答案 1 :(得分:3)
您可以像这样简化:
public int getSalaryRank() {
int salaryRank;
if(yearlySalary <= 60000.00) {
return 1;
}
if(yearlySalary <= 80000.00) {
return 2;
}
if(yearlySalary <= 100000.00) {
return 3;
}
if(yearlySalary <= 125000.00) {
return 4;
}
return 5
}
左侧的所有检查都是不必要的,因为语句是按顺序执行的。此外,您可以删除else语句并直接返回salaryrank
。此外,当你处理钱时,永远不要使用浮点数。请改用BigDecimal
编辑:考虑到@ AlexWien关于多个退出点的评论,这可能是一个更好的解决方案:
public int getSalaryRank() {
if(yearlySalary <= 60000.00) {
salaryRank = 1;
} else if(yearlySalary <= 80000.00) {
salaryRank = 2;
} else if(yearlySalary <= 100000.00) {
salaryRank = 3;
} else if(yearlySalary <= 125000.00) {
salaryRank = 4;
} else {
salaryRank = 5;
}
return salaryRank;
}
答案 2 :(得分:2)
怎么样:
public int getSalaryRank()
{
if(yearlySalary <= 60000.00) return 1;
if(yearlySalary <= 80000.00) return 2;
if(yearlySalary <= 100000.00) return 3;
if(yearlySalary <= 125000.00) return 4;
return 5;
}
答案 3 :(得分:2)
如果以前else
中的任何一个是真的,您的程序将无法访问if
语句。因此,您可以使用它,并省略以下内容:yearlySalary > 60000.00 &&
if(yearlySalary <= 60000.00) {
salaryRank = 1;
} else if(yearlySalary <= 80000.00) {
salaryRank = 2;
}
另外,双打不是特别精确。它们是浮点数,这意味着您无法准确保存例如0.1
的值。仔细看看。 BigDecimal是一种更适合货币使用的类型。