2017-07-16 144 views
0

我的代码:为什么价格打印两次?

package ecommerceapp; 

import java.util.Scanner; 

public class ECommerceApp { 
public static void main(String[] args) { 
    String productsCatalog = " "; 
    //double price = getPrice(); 
    bannerPrinter(); 
    productsBuilder(); 
    boolean exists = getOrder(productsCatalog); 

    if (exists == true) { 
     double salesTotal = 0; 
     printTotal(salesTotal); 
    } else { 
     System.out.println("The product not found."); 
    } 
    //double price = 0; 
    //double tax = getTax(price); 

    //getTotal(price, tax); 
} 

public static void bannerPrinter() { 
    System.out.println("******************************************"); 
    System.out.println("====== Welcome to my eCommerce app! ======"); 
    System.out.println("******************************************"); 
} 

public static String productsBuilder() { 
    String productsCatalog = "Desk  Table  Pen  "; 
    return productsCatalog; 
} 

public static boolean getOrder(String productsCatalog) { 
    String userProduct; 
    boolean exists = true; 
    Scanner scnr = new Scanner(System.in); 
    System.out.print("Please enter a product name: "); 
    userProduct = scnr.nextLine(); 
    if (productsBuilder().toLowerCase().contains(userProduct.toLowerCase())) { 
     exists = true; 
     System.out.println(exists); 
    } else { 
     exists = false; 
     System.out.println(exists); 
    } 
    return exists; 
} 

public static double getPrice() { 
    double price = 1 + Math.random() * 99; 
    price = Math.round(price * 100.0)/100.0; 
    System.out.println("Price is: " + price); 
    return price; 
} 

public static double getTax(double price) { 
    double tax = (0.1 * getPrice()); 
    tax = Math.round(tax * 100.0)/100.0; 
    System.out.println("Tax is: " + tax); 
    return tax; 
} 

public static double getTotal(double price, double tax) { 
    double salesTotal = getPrice() + getTax(price); 
    return salesTotal; 
} 

public static void printTotal(double salesTotal) { 
    double price = 0; 
    double tax = 0; 
    System.out.printf("Your sale total is: $%.2f", getTotal(price, tax)); 
    System.out.println(); 
} 

} 

为什么我的输出打印价格的两倍?


======欢迎来到我的电子商务应用! ======


请输入产品名称:办公桌

真正

价格为:64.43

价格为:85.07

税为:8.51

您的销售总额为:$ 72.94

生成成功(总时间:3秒)

当我从两个用getPrice和getTax除去的System.out.println,这是我的输出


======欢迎到我电子商务应用程序! ======


请输入产品名称:办公桌

真正

税:8.6

你的销售总额为:$ 38.60

+3

没有getter方法打印任何东西。他们应该返回一个值,并没有副作用。 –

+0

我的提交将不会显示价格或税金,但我希望价格仅生成一次,无论如何。 – Sharon

+3

你的代码有太多的问题恕我直言,恕我直言。底线是你打电话两次,这是打印两次。你的许多方法返回你永远不会使用的值。 –

回答

3

因为你打电话getPrice(),在getTax()getTotal()中均打印价格。

5

因为您正在打印getPrice的结果。而getPrice本身就是打印价格,所以你的程序打印价格两次。删除getPrice块中的“System.out.println”函数。

+0

如果我按照建议删除println,则价格和税款对用户不可见。价格产生两次的事实意味着我的方法调用存在问题,并且我想知道是否有人能够看到该问题并帮助我解决问题。 – Sharon

1

当你调用getTotal(内部printTotal)你调用用getPrice其本身具有

System.out.println("Price is: " + price);

,并为这样的结果,当你再调用getTax你再次调用用getPrice

double tax = (0.1 * getPrice());

然后调用println,这就是为什么它打印两次。

+0

当我用价格替换getPrice时,这里double tax =(0.1 * getPrice()),它将价格设置为0,并且没有getPrice生成的价格。如何在不使用整个方法的情况下单独使用价格? – Sharon

+0

我建议你不要在get方法内部打印输出,除非它用于调试目的。 – Jockie

+0

你应该做的是首先删除get方法内部的打印输出,然后在你应该得到的printTotal里面,把价格放在一个变量中,比如'double price = getPrice()',然后打印出价格是这样的'System.out.println(“价格是:”+价格)''然后进行税收并在那里做同样的事情,然后当你达到总量时,你就像你一样通过价格和税收已经在做了。 – Jockie