我正在参加 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);
}
}
最佳答案
你走在正确的道路上。显然,您打算将通用值分配给变量,您已将其作为 x
、 y
和 z
完成。但请注意,这些变量名称的描述性并不强 - 更好的解决方案是首先调用这些变量的实际名称... subtotal
, 税收乘数
和小费乘数
。
但请注意,您仍然有一些裁员。您重复计算税费两次——一次是在打印税费时,另一次是在打印总计时。因此,您应该将该值分配给一个新的 double 值 (tax
)。可以使用 tip
和 total
完成类似的重构。
这会将您的代码变成如下所示:
// 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/