所以我正在做练习测试,这就是问题:
编写一个Java方法,该方法将一个double value pay作为参数并打印 到标准输出的税率对应于输入的薪酬值。 使用下表确定税率。 (6分)
如果支付超过100,000,税率为40%
如果支付超过60,000且小于或等于100,000,则税率为30%
如果支付超过30,000且小于或等于60,000,则税率为20%
如果支付超过15,000且小于或等于30,000,则税率为10%
如果支付超过5,000且小于或等于15,000,则税率为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);
}}
我想知道的是:这是回答这个问题的最佳方式吗?我们已经学会了如何设计数据类型,这个问题似乎很简单。我觉得我忽略了一些东西。
答案 0 :(得分:4)
使用提供较低和/或上限和乘数的表。然后只需扫描表格,直到找到合适的行并使用该乘数。
在实际应用中,表格将位于数据库中,因为权力随时可以改变范围,范围数和乘数。
答案 1 :(得分:4)
正如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
语句可能比映射的开销更快。然而,在一个每年逐字增加税率(不常见,幸亏)的世界中,像上述这样更有活力的方法是有帮助的。
答案 2 :(得分:2)
你总是可以这样做。 它避免了大量的if块,并且还增加了更好的结构。
import java.util.HashMap;
import java.util.Map;
public class Two {
private static Map<Double, Double> rates = new HashMap<Double, Double>();
static {
rates.put(100000d, 0.4d);
rates.put(60000d, 0.3d);
rates.put(30000d, 0.2d);
rates.put(15000d, 0.1d);
rates.put(5000d, 0.05d);
}
public static void main(String[] args) {
double j = Double.parseDouble(args[0]);
System.out.println(rate(j));
}
private static double rate(double pay) {
for(Double d: rates.keySet())
if(pay > d) return pay * rates.get(d);
return 0.0d;
}
}