Java - 嵌套 if/else if - 变量从不实例化

Java - nested if/else if - Variables never instantiate

在编程方面,我是一个相对初学者,到目前为止,我对每个概念都掌握得很好。我在这个项目中的任务是根据不同县的不同法律制定税法,我必须使用嵌套的 if/else 语句来完成这项工作。这是我的代码。

public static double question3(String county, String product, String paymentMethod)
{        
    double taxRate;

    if (county.equals("Dale"))
    {                       
        if (product.equals("Tobacco") || product.equals("Alcohol"))
        {
            if (paymentMethod.equals("Cash"))
                taxRate = 8.5;
            else if (paymentMethod.equals("Check"))
                taxRate = 4.5;
            else
                taxRate = 3.5;
        }

        else if (product.equals("Potato Chips") || product.equals("Soda Pop"))
        {
            if (paymentMethod.equals("Check"))
                taxRate = 4.0;
            else
                taxRate = 3.0;
        }

        else if (paymentMethod.equals("Check"))
            taxRate = 2.5;

        else
            taxRate = 1.5;
    }

    else if (county.equals("Richland"))
    {                        
        if (product.equals("Books"))
        {
            if (paymentMethod.equals("Credit"))
                taxRate = 2.0;
            else if (paymentMethod.equals("Check"))
                taxRate = 1.5;
            else
                taxRate = 1.0;
        }

        else if (product.equals("Clothing"))
        {
            if (paymentMethod.equals("Credit"))
                taxRate = 3.0;
            else if (paymentMethod.equals("Check"))
                taxRate = 2.5;
            else
                taxRate = 2.0;
        }

        else if (product.equals("Shoes"))
        {
            if (paymentMethod.equals("Credit"))
                taxRate = 4.0;
            else if (paymentMethod.equals("Check"))
                taxRate = 3.5;
            else
                taxRate = 3.0;
        }  
    }

    else if (county.equals("Park"))
    {            
        if (! product.equals("Food"))
        {
            if (product.equals("Alcohol"))
                taxRate = 5.0;
            else if (product.equals("Clothing") || product.equals("Shoes"))
                taxRate = 0.0;
            else
                taxRate = 3.0;
        }

        if (paymentMethod.equals("Cash") || paymentMethod.equals("Credit"))
        {
            if (! product.equals("Food"))
            {
                if (product.equals("Alcohol"))
                    taxRate = 5.0;
                else if (product.equals("Clothing") || product.equals("Shoes"))
                    taxRate = 0.0;
                else
                    taxRate = 2.0;
            }
            taxRate = 1.0;
        }

        else
            taxRate = 2.0;
    }

    else return Double.NaN;

    return 0; 
}    

每个 "county" 都有不同的法律和附加税,具体取决于产品 and/or 付款方式(即,如果您在戴尔县用现金购买酒精饮料,则税率为 8.5%)。 if 和 else if 语句表示税收增加或减少的所有 "special cases"。每个县块末尾的 else 语句是该县税收的基本税率,用于所有其他购买(戴尔为 1.5%,里奇兰为 3%,帕克为 2%)。

这里发生的事情是,当我 运行 测试用例时,无论在什么情况下,taxRate 的值都是 0.0,就好像它从未被分配过值一样。我希望我在这里提供了足够的信息,但我不知道我做错了什么。

非常感谢在这个问题上得到的任何帮助!

你的错误是 你的代码中没有任何地方 return taxRate,这正是你想要的 return..

else return Double.NaN;

return 0; 

您需要 return 税率,因此请将其放在代码末尾:

return taxRate;

您可以先将其设置为 Double.NaN,如果这是您想要的:

double taxRate = Double.NaN;

但最后 只有 return taxRate 是您需要的,"no matter what the scenario" 正如 Jeroen 正确所说在他的评论中!