java - 如果存在冗余,我该如何从这个java问题中删除冗余?

标签 java

我正在参加 CS140,并尝试解决 Practice-It 中的问题。我不知道还能做什么来解决这个问题。指令是:“以下程序多次重复相同的表达式。修改程序以使用适当类型的变量删除所有冗余表达式。”我刚刚学习如何使用整数并且正在努力解决它,所以我确信我错过了一些简单的东西。我以原始形式发布了代码,下面是我尝试解决该问题的方法。预先感谢您的任何帮助! :)

// This program computes the total amount owed for a meal,
// assuming 8% tax and a 15% tip.
public class Receipt {
    public static void main(String[] args) {
        int x=38+40+30;
        double y=.08;
        double z=.15;
        System.out.println("Subtotal:");
        System.out.println(x);
        System.out.println("Tax:");
        System.out.println((x) * y);
        System.out.println("Tip:");
        System.out.println((x) * z);
        System.out.println("Total:");
        System.out.println((x) + (x) * y + (x) * z);
                           
                            

    }
}

原始问题如下。

// This program computes the total amount owed for a meal,
// assuming 8% tax and a 15% tip.
public class Receipt {
    public static void main(String[] args) {
        System.out.println("Subtotal:");
        System.out.println(38 + 40 + 30);
        System.out.println("Tax:");
        System.out.println((38 + 40 + 30) * .08);
        System.out.println("Tip:");
        System.out.println((38 + 40 + 30) * .15);
        System.out.println("Total:");
        System.out.println(38 + 40 + 30 +
                            (38 + 40 + 30) * .08 +
                            (38 + 40 + 30) * .15);

    }
}

最佳答案

你走在正确的道路上。显然,您打算将通用值分配给变量,您已将其作为 xyz 完成。但请注意,这些变量名称的描述性并不强 - 更好的解决方案是首先调用这些变量的实际名称... subtotal, 税收乘数小费乘数

但请注意,您仍然有一些裁员。您重复计算税费两次——一次是在打印税费时,另一次是在打印总计时。因此,您应该将该值分配给一个新的 double 值 (tax)。可以使用 tiptotal 完成类似的重构。

这会将您的代码变成如下所示:

// This program computes the total amount owed for a meal,
// assuming 8% tax and a 15% tip.
public class Receipt {
    public static void main(String[] args) {
        int subtotal = 38 + 40 + 30; // formerly x
        double taxMultiplier = 0.08; // formerly y
        double tipMultiplier = 0.15; // formerly z
        double tax = subtotal * taxMultiplier;
        double tip = subtotal * tipMultiplier;
        double total = subtotal + tax + tip;

        System.out.println("Subtotal:");
        System.out.println(subtotal);
        System.out.println("Tax:");
        System.out.println(tax);
        System.out.println("Tip:");
        System.out.println(tip);
        System.out.println("Total:");
        System.out.println(total);
    }
}

当然,您可以查看这段代码并说“嘿,我只使用了taxMultiplier和tipMultiplier一次,为什么还要声明它们呢?”你是对的——然后你可以再次重构,将taxMultiplier和tipMultiplier的值内联到税收和小费计算中。

将中间值分配给具有合理名称的变量是一种技术,我们用它来最大限度地减少错误(例如,在重复时可能会拼写错误),并且还可以清楚地表明发生了什么。在此代码中,您可以清楚地看到总计是小计、税费和小费的总和。原始代码中的数字汤让人很难看出这一点。此外,如果某个值发生变化(例如小计),您只需在一处更改它,适当的更改将级联到代码的其余部分。

关于java - 如果存在冗余,我该如何从这个java问题中删除冗余?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64307147/

相关文章:

java - 我应该下载哪个 Eclipse 以开始 Android 应用程序开发?

java - Kerberos 协议(protocol)中的第 7 条消息和票证验证

java - 在 Spring Batch 中将 writer 添加到相同的 datfile 中

java - 是否有与 JFrame.pack() 等效的方法,仅在子组件小于其数据模型时才调整子组件的大小?

java - Google Vision APi 标签降低了标签百分比

java - Java 与 Oracle 中的 GUID

Java 9 HttpClient 发送多部分/表单数据请求

java - 不了解 Google SQL 的 JPA/JDO 的 Google 端点

Tomcat 上的 Java Web 应用程序 - 显示用户上传的文件

java - 如何在 Spring Data Solr 1.0 中搜索短语