【问题标题】:why is price being printed twice?为什么要打印两次价格?
【发布时间】:2017-07-16 12:33:40
【问题描述】:

我的代码:

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();
}

}

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


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


请输入产品名称:desk

是的

价格为:64.43

价格为:85.07

税为:8.51

您的总销售额为:72.94 美元

构建成功(总时间:3 秒)

当我从 getPrice 和 getTax 中删除 System.out.println 时,这是我的输出


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


请输入产品名称:desk

是的

税为:8.6

您的总销售额为:38.60 美元

【问题讨论】:

  • 没有 getter 方法打印任何东西。它们应该返回一个值并且没有副作用。
  • 我的提交不会显示价格或税金,但我希望价格只生成一次,无论如何。
  • 您的代码有太多问题无法回答恕我直言。底线是您调用了两次,即打印了两次。您的许多方法返回您从未使用过的值。
  • 所以,有人已经对这个也投了反对票@HovercraftFullOfEels 我只需要打印价格、税金和总数供用户查看。如果我按照建议删除 println,则价格和税金不可见。价格生成两次的事实意味着我的方法调用存在问题,我想知道是否有人可以看到问题并帮助我。
  • 改进和澄清问题。编辑问题,使用您的新代码和详细信息(在原始代码下方)显示您如何遵循给出的建议但仍然遇到问题。

标签: java methods


【解决方案1】:

因为您正在打印 getPrice 的结果。并且 getPrice 本身正在打印价格,因此您的程序会打印两次价格。删除 getPrice 块中的“System.out.println”函数。

【讨论】:

  • 如果我按照建议删除 println,则用户看不到价格和税金。价格生成两次的事实意味着我的方法调用存在问题,我想知道是否有人可以看到问题并帮助我。
【解决方案2】:

因为您调用getPrice(),它会在getTax()getTotal() 中打印价格。

【讨论】:

    【解决方案3】:

    当您调用 getTotal (Inside printTotal) 时,您调用的是 getPrice,它本身具有

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

    因此,当您调用 getTax 时,您再次调用 getPrice

    double tax = (0.1 * getPrice());

    然后调用 println,这就是它打印两次的原因。

    【讨论】:

    • 当我将 getPrice 替换为这里的价格 double tax = (0.1 * getPrice()) 时,它将价格设置为 0,并且没有 getPrice 生成的价格。如何不使用整个方法单独使用价格?
    • 我建议您不要在 get 方法中包含打印输出,除非它是出于调试目的。
    • 您应该首先删除 get 方法中的打印输出,然后在 printTotal 中您应该获取并将价格放入变量中,例如 double price = getPrice() 然后打印像System.out.println("Price is : " + price) 这样的价格,然后继续征税并在那里做同样的事情,然后当你得到总数时,你就像你已经在做的那样传递价格和税收。
    • 嗨@Jockie 我做了你建议的改变,它奏效了,我没有重复的价格,但数学是错误的,因为价格被生成了两次。这是我现在的输出。请输入产品名称:desk true 价格为:$90.00 税费为:$9.90 您的销售总额为:$20.30
    猜你喜欢
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 1970-01-01
    • 2022-11-21
    相关资源
    最近更新 更多