java - 避免java中大量的if-else语句

标签 java if-statement

所以我正在做练习测试,这就是问题:

编写一个 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/

相关文章:

java - 响应用户输入的 Applet 绘图

java - 在哪里添加 KeyListener 以便 'always' 被监听

javascript - 如何根据下拉选择显示/隐藏 div?

c - 这段代码在 C 中不能正常运行的原因是什么?

vb.net - If 1 = 2 = 3 Then (...) 如何工作

java - 使用 Spring Security 默认登录和身份验证将用户放入 HttpSession

java - 如何使用表格格式打印实数矩阵

java - 我可以使用 pack() 仅调整框架的高度吗?

bash - bash脚本if语句里面的命令

javascript - If 语句(未单击按钮)