Java 使用嵌套if语句进行计算

Java 使用嵌套if语句进行计算,java,nested-loops,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 HashMa

我正在编写一个嵌套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));
    }
}
公共类销售税
{
公共静态void main(字符串[]args)
{
//为购物车输入项目
HashMap购物车=新建HashMap();
HashMap shoppingcart=新建HashMap();
//创建扫描仪
扫描仪输入=新扫描仪(System.in);
//变数
半焦完成;
//布尔商品;
双倍总价=0.00;
双重征税价格;
双ftax;
//选择列表中的项目。
做
{  
系统输出打印(“请输入项目”);
String item=input.nextLine();
系统输出打印(“请输入“+项目+”的价格:”;
字符串price=input.nextLine();
double price 1=double.parseDouble(价格);
总价+=价格1;
//System.out.println(String.format(“%.2f”,totalprice));
String price2=String.valueOf(price1);
购物车(商品,价格2);
//确定项目是否有附加税
如果(项目包含(“音乐”))
{
price1=Double.parseDouble(价格);
taxprice=价格1*.10;
总价=(总价+税价);
如果(项目包含(“导入”))
{
price1=Double.parseDouble(价格);
ftax=价格1*.0.05;
totalprice=(totalprice+taxprice+ftax);
}
//System.out.println(String.format(“%.2f”,totalprice));
String newprice2=String.valueOf(String.format(“%.2f”,totalprice));
shoppingcart.put(项目,新价格2);
}
如果(项目包含(“瓶子”))
{
price1=Double.parseDouble(价格);
taxprice=价格1*.10;
总价=(价格1+税费价格);
如果(项目包含(“导入”))
{
price1=Double.parseDouble(价格);
ftax=价格1*.0.05;
totalprice=(totalprice+taxprice+ftax);
}
//System.out.println(String.format(“%.2f”,totalprice));
String newprice2=String.valueOf(String.format(“%.2f”,totalprice));
shoppingcart.put(项目,新价格2);
}
else if(项目包含(“导入”))
{
price1=Double.parseDouble(价格);
taxprice=价格1*.0.05;
总价=(总价+税价);
如果(项目包含(“导入”))
{
price1=Double.parseDouble(价格);
ftax=价格1*.0.05;
totalprice=(totalprice+taxprice+ftax);
}
//System.out.println(String.format(“%.2f”,totalprice));
String newprice2=String.valueOf(String.format(“%.2f”,totalprice));
shoppingcart.put(项目,新价格2);
}
其他的
{
购物车。放置(物品、价格);
}
System.out.print(“是否继续添加项目?(Y型表示是,N型表示否)”;
done=input.nextLine().charAt(0);
}while(Character.toUpperCase(done)='Y');
System.out.println(“您的购物车包含以下含税的at项目”+shoppingcart);//+String.format(“%.2f”,totalprice));
System.out.println(String.format(“%.2f”,totalprice));
}
}

您两次添加其中一种税:

            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);
            }
或:


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

您将两次添加其中一种税:

            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);
            }
或:


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

您将两次添加其中一种税:

            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);
            }
或:


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

您将两次添加其中一种税:

            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);
            }
或:


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

我想您应该更好地构造代码。我将添加一个名为“calculateTax”的方法:

...
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
}

我想你应该更好地组织你的代码。我将添加一个名为“calculateTax”的方法:

...
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
}

我想你应该更好地组织你的代码。我将添加一个名为“calculateTax”的方法:

...
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
}

我想你应该更好地组织你的代码。我将添加一个名为“calculateTax”的方法:

...
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
}

尝试使用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);

尝试使用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);

尝试使用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);

尝试使用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);

在第二次添加
taxprice
时可以发现您的错误

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

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

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

    ...
}
应改为

totalprice = (totalprice + ftax);

// (Or shorter)
totalprice += ftax;

此外,还有一些补充建议:

while循环
递归
使用while循环或递归,而不是使用多个嵌套的ifs