方法不完全工作?可能是什么错误?

时间:2013-04-12 15:50:11

标签: java variables runtime-error development-environment

我正在处理一些项目,但我无法找到以下代码的错误:
    

double getInterest(double amt,double tax){  
        double diff=0;
        double refund=0;
        double interest=0;
        if(amt>=(tax*0.4)){
           diff=amt-(tax*0.4);
           System.out.println(" "+diff);  //This is not working.Nothing gets printed.
           refund=diff;                   //The value is not being assigned to refund.
        }                                 //refund remains to be 0 throughout.
         interest=diff*0.01*12;
         if(refund>0){
            JOptionPane.showMessageDialog(null,"Your refund is: "+refund);
         }
        return interest;
}

我无法弄清代码中的任何错误。但它仍然没有完全发挥作用 错误在代码中以注释的形式给出 有人帮我弄清楚错误并重新解决问题吗?

我不知道为什么没有打印diff的值以及为什么diff的值没有分配给变量refund

我在NetBeans工作,并没有给出任何编译时错误。

我尝试使用println diffrefund来检查值,但是这些值没有打印出来。

3 个答案:

答案 0 :(得分:0)

如果if块中的语句永远不会被执行,那意味着永远不会调用此方法,其中参数满足条件amt >= (tax*0.4)。所以真正的问题是,你传递给这种方法的价值是什么?

答案 1 :(得分:0)

你的包围 if(amt>=(tax*0.4){ line在第一个)括号之前缺少结束{括号。确保检查包围并确保在选项菜单中打开了所有错误(如果可以的话)。

由于包围错误,此代码不应编译。检查Netbeans是否正在编译正确的项目,因为这应该在编译时发疯。

答案 2 :(得分:0)

在处理货币时,您应始终使用BigDecimal类型,以避免double precision issues

以下是BigDecimal

中重写的代码
BigDecimal getInterest(final BigDecimal amount, final BigDecimal tax) {
    BigDecimal diff = BigDecimal.ZERO;
    BigDecimal refund = BigDecimal.ZERO;
    BigDecimal reducedTax = new BigDecimal("0.4").multiply(tax);
    System.out.println("Amount is " + amount + ". Tax times 0.4 is " + tax + ".");
    if (amount.compareTo(reducedTax) >= 0) {
        diff = amount.subtract(reducedTax);
        System.out.println(diff);
        refund = diff;
    }
    BigDecimal interest = diff.multiply(new BigDecimal("0.01")).multiply(new BigDecimal("12"));
    if (refund.compareTo(BigDecimal.ZERO) > 0) {
        JOptionPane.showMessageDialog(null, "Your refund is: " + refund);
    }
    return interest;
}

是的,我知道这更加丑陋。它也会慢得多。但它是新的正确的

在你的问题上,大概是代码没有输入if因为amount不大于tax * 0.4 - 如果你确定它可能那么你可能已经遇到了双精度的问题。

我在println之前添加了if,以便您可以在测试发生之前查看值。