使用嵌套if语句进行计算

时间:2014-08-19 14:11:03

标签: java nested-loops

我正在开发一个嵌套if的程序,而且我的数学是正确的,唯一的一点是正确的输出没有打印。我不知道我应该把输出行放在第一个if,嵌套if或者两行中?我正在进行测试的价值是进口香水瓶27.99。输出应该是32.19,我得到34.99。

public class SalesTax 
    {
    public static void main(String[] args) 
    {
        // Input items for shopping cart
        HashMap<String, String> cart = new HashMap<String, String>();
        HashMap<String, String> shoppingcart = new HashMap<String, String>();

        // Create a Scanner
        Scanner input = new Scanner(System.in);

        // variables
        char done;

        //boolean goods;
        double totalprice = 0.00;
        double taxprice;
        double ftax;

        // Pick items for list.
        do 
        {  
            System.out.print("Please enter an item.");
            String item = input.nextLine();

            System.out.print("Please enter the price for "+ item + ": ");
            String price = input.nextLine(); 

            double price1 = Double.parseDouble(price);
            totalprice += price1; 

            //System.out.println(String.format("%.2f",totalprice));
            String price2 = String.valueOf(price1);
            cart.put(item, price2);

            //determine if item will have additional tax
            if (item.contains("music"))
            {
                 price1 = Double.parseDouble(price);
                taxprice = price1 * .10;

                totalprice = (totalprice + taxprice);

                if (item.contains("imported"))
                {
                     price1 = Double.parseDouble(price);
                    ftax = price1 * .05;

                    totalprice = (totalprice + taxprice + ftax);
                }

                //System.out.println(String.format("%.2f",totalprice));
                String newprice2 = String.valueOf(String.format("%.2f", totalprice));
                shoppingcart.put(item,newprice2);
            }
            else if(item.contains("bottle"))
            {
                 price1 = Double.parseDouble(price);
                taxprice = price1 * .10;

                totalprice = (price1 + taxprice);

                if (item.contains("imported"))
                {
                     price1 = Double.parseDouble(price);
                    ftax = price1 * .05;

                    totalprice = (totalprice + taxprice + ftax);
                }

                //System.out.println(String.format("%.2f",totalprice));
                String newprice2 = String.valueOf(String.format("%.2f", totalprice));
                shoppingcart.put(item,newprice2);
            }
            else if (item.contains("imported"))
            {
                 price1 = Double.parseDouble(price);
                taxprice = price1 * .05;

                totalprice = (totalprice + taxprice);

                if (item.contains("imported"))
                {
                     price1 = Double.parseDouble(price);
                    ftax = price1 * .05;

                    totalprice = (totalprice + taxprice + ftax);
                }

                //System.out.println(String.format("%.2f",totalprice));
                String newprice2 = String.valueOf(String.format("%.2f", totalprice));
                shoppingcart.put(item,newprice2);
            }
            else 
            {
                shoppingcart.put(item, price);
            }


            System.out.print("Would you like to continue to add items? (Type Y) for Yes and (Type N) for No.");
            done = input.nextLine().charAt(0);
        } while(Character.toUpperCase(done) == 'Y');

       System.out.println("Your cart contains the following at items with tax" + shoppingcart); //+ String.format("%.2f", totalprice));
       System.out.println(String.format("%.2f",totalprice));
    }
}

5 个答案:

答案 0 :(得分:2)

尝试使用bigDecimal而不是float或double。

事实上,如果您尝试:

double value = 10*0.09;
System.out.println(value);

你有:

0.8999999999999999

使用此方法:

BigDecimal value1 = new BigDecimal("10");
BigDecimal value2 = new BigDecimal("0.09");
BigDecimal value = value1.multiply(value2);
System.out.println(value);

答案 1 :(得分:1)

您要两次加税:

            totalprice = (price1 + taxprice);

            if (item.contains("imported"))
            {
                price1 = Double.parseDouble(price);
                ftax = price1 * .05;

                totalprice = (totalprice + taxprice + ftax);
            }

应该是:

            totalprice = (price1 + taxprice);

            if (item.contains("imported"))
            {
                ftax = price1 * .05;
                totalprice = (price1 + taxprice + ftax);
            }

或者:

            totalprice = (price1 + taxprice);

            if (item.contains("imported"))
            {
                ftax = price1 * .05;
                totalprice = (totalprice + ftax);
            }

哦,并且不需要再次从字符串中解析price1。它已包含正确的值。

答案 2 :(得分:0)

我想你应该更好地构建你的代码。我会添加一个名为&#39; calculateTax&#39;:

的方法
...
double totalPrice = originalPrice + originalPrice * calculateTax(originalPrice, item);
String newprice = String.valueOf(String.format("%.2f", totalprice));
shoppingcart.put(item,newprice);
...


public double calculateTax(double originalPrice, String item){
  double tax = 0.0;

  if(item.contains("music")){
    tax += originalPrice * O.1;
  }
  if(item.contains("bottle")){
    tax += originalPrice * O.1;
  }
  if(item.contains("imported")){
    tax += originalPrice * O.05;
  }
  return tax
}

答案 3 :(得分:0)

第二次添加taxprice时可以找到您的错误。

if (item.contains("music"))
{
    totalprice = (price1 + taxprice);
    ...

    if (item.contains("imported"))
    {
        ...

        totalprice = (totalprice + taxprice + ftax); // <- You've already added the taxprice
    }

    ...
}

所以:

totalprice = (totalprice + taxprice + ftax);

应改为

totalprice = (totalprice + ftax);

// (Or shorter)
totalprice += ftax;

另外,还有一些其他建议:

while-looprecursion使用while循环或递归与单个if,else-if,else case(或{{ 1}})。从代码中我可以看出你对编程很陌生,但是拥有重复的代码绝不是你想要的。 :)

try-catches:另外,我会在switch-case周围使用try-catch,以防输入的内容无法解析(如某些内容)随机字母):

Double.parseDouble(...);

BigDecimals:这对我来说也是一个新手,但几个星期前我听说双打和花车在使用货币时非常糟糕。可以在herehere找到包含更多信息的相关信息。相反,请使用try{ price1 = Double.parseDouble(price); } catch(ParseException ex){ price1 = 0.00; }

答案 4 :(得分:0)

嘿嗨,你的输入是:

imported bottle of perfumes & Price is 27.99

它进入第二个if if条件,即(否则if(item.contains(“bottle”)))

如果你的计算基于ans只会是34.99。

我认为你的计算基于第3个if else。

例如:

Please enter an item: imported bottle of perfumes
Enter the price for imported bottle of perfumes: 27.99

然后

taxprice:2.799
totalprice:30.788999999999998
ftax:1.3995
totalprice = (totalprice + taxprice + ftax);
i.e totalprice: 34.99 only and its correct.

但如果您的输入是这样的:

Please enter an item: imported perfumes
Enter the price for imported bottle of perfumes: 27.99    

然后

taxprice:1.399
totalprice:29.389499999999998
ftax:1.3995
totalprice = (totalprice + taxprice + ftax)
i.e totalprice: = 32.19

希望你弄错了,用输入值进行交叉检查。