所以我正在做练习测试,这就是问题:
编写一个 Java 方法,该方法采用一个 double 值 pay 作为参数并进行打印 将与输入的工资值相对应的税率转换为标准输出。 使用下表确定税率。 (6分)
缴纳10万以上,税率为40%
缴纳6万以上10万以下,税率为30%
缴纳3万以上6万以下,税率为20%
缴纳金额超过15,000且小于或等于30,000,税率为10%
缴纳金额超过5000元且小于等于15000元,税率为5%
如果工资小于或等于5,000,税率为0
这是我编写的代码,可以运行:
public class Two {
public static void main(String[] args){
double j= Double.parseDouble(args[0]);
Two.taxrate(j);}
public static void taxrate(double pay)
{
if (pay> 100000) {System.out.println(pay*.4);}
else if (pay>60000) {System.out.println(pay*.3);}
else if (pay>30000) {System.out.println(pay*.2);}
else if (pay>15000) {System.out.println (pay*.1);}
else if (pay>5000) {System.out.println(pay*.05);}
else System.out.println(0.0);
}}
我想知道的是:这是回答这个问题的最佳方式吗?我们已经学会了如何设计数据类型,这个问题看起来很简单。我觉得我忽略了一些东西。
最佳答案
正如 EJP 所建议的,您需要一个工资与税率的“表”。在完整的应用程序中,此信息可能会存储在数据库中而不是内存中,但是要获得介于静态定义和完整规模数据库之间的内容,则需要使用Map
。具体来说,使用 NavigableMap
将允许非常简单地访问此类计算:
NavigableMap<Double, Double> payToTaxRate = new TreeMap<Double, Double>();
// e.g., loaded from a file:
payToTaxRate.put(100000, 0.4);
payToTaxRate.put(60000, 0.3);
payToTaxRate.put(30000, 0.2);
payToTaxRate.put(15000, 0.1);
payToTaxRate.put(5000, 0.05);
payToTaxRate.put(Double.MIN_VALUE, 0);
System.out.prinln(pay * payToTaxRate.floorEntry(pay).getValue());
当然,这对于赋值来说是多余的,并且 if
语句可能比映射的开销更快。然而,在一个税级逐年增加的世界中(谢天谢地,并不经常增加),像上面这样的更动态的方法是有帮助的。
关于java - 避免java中大量的if-else语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22471327/