Java 使用嵌套if语句进行计算
我正在编写一个嵌套if的程序,我的数学是正确的,唯一的问题是正确的输出没有打印出来。我不知道在第一行if、嵌套if或两行中输出的行应该放在哪里?我在测试中输入的数值是27.99美元的进口香水。输出应该是32.19,我得到34.99Java 使用嵌套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
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