#java
#java
Вопрос:
Я в CS140 и пытаюсь решить проблемы на практике-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);
}
}
Комментарии:
1. Я думаю, вы справились с этим, хотя
(x)
всегда равноx
, чтобы вы могли удалить ненужные круглые скобки. Также я бы переименовалy
вtax
иz
tip
для ясности.x
,y
иz
не являются значимыми именами.2. Вы могли бы еще больше уменьшить ее, потому что вы повторяете
x * y
иx * z
дважды каждый. Назначьте их переменным и используйте вместо них переменные.3. Для меня это нормально. Вы могли бы заменить все вхождения
(x)
простоx
. Иx
,y
иz
соответствующим именам (напримерtax
, иtip
).
Ответ №1:
Вы на правильном пути. Очевидно, что вы предназначены для присвоения общих значений переменным, что вы сделали как x
и y
и z
. Обратите внимание, однако, что эти имена переменных не очень описательны — лучшим решением было бы начать с того, что называть эти вещи такими, какие они есть на самом деле … subtotal
, taxMultiplier
и tipMultiplier
.
Но обратите внимание, что у вас все еще есть некоторые избыточности. Вы повторяете свой расчет налога дважды — один раз при печати налога, а затем снова при печати итога. Поэтому вы должны присвоить это значение новому double ( tax
). Аналогичный рефакторинг можно выполнить с tip
помощью and 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 в расчеты налогов и чаевых.
Присвоение промежуточных значений переменным с разумными именами — это метод, который мы используем для минимизации ошибок (например, вы можете опечатать значение при его повторении), а также для того, чтобы было ясно, что происходит. В этом коде вы можете ясно видеть, что total — это сумма промежуточного итога, налога и чаевых. Из-за числового супа в исходном коде это было действительно трудно увидеть. Кроме того, если значение изменяется (например, промежуточный итог), вам нужно будет изменить его только в одном месте, и соответствующие изменения будут каскадироваться по всему остальному коду.
Комментарии:
1. Спасибо всем за вашу помощь в этом! Мне было интересно, создаю ли я больше избыточности, используя некоторые из переменных, которые я объявил, оказывается, да, я был. Ha. Я надеюсь, что я не единственный, кому поначалу было трудно изучать этот материал, у вас у всех это так хорошо! Еще раз, спасибо всем за вашу помощь! Вероятно, сегодня я снова застряну и задам еще один вопрос, но пальцы скрещены.
2. Вы были на правильном пути. Лично я думал, что инструкции по назначению были излишне расплывчатыми. Удачи!
Ответ №2:
Я подозреваю, что урок учит вас отделять ваши вычисления от вашего отображения.
Вот что, я думаю, урок хотел, чтобы вы написали.
public class Receipt {
public static void main(String[] args) {
int subTotal = 38 40 30;
double tax = .08 * subTotal;
double tip = .15 * subTotal;
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);
}
}
Вы можете дополнительно уменьшить размер кода, создав метод печати для печати значений.
public class Receipt {
public static void main(String[] args) {
int subTotal = 38 40 30;
double tax = .08 * subTotal;
double tip = .15 * subTotal;
double total = subTotal tax tip;
printAmount("Subtotal:", subTotal);
printAmount("Tax:", tax);
printAmount("Tip:", tip);
printAmount("Total:", total);
}
private static void printAmount(String label, double value) {
System.out.println(label);
System.out.println(value);
}
}
Наконец, можно напечатать текст и значение в одной строке со значением, отформатированным знаком доллара, но пока это выходит далеко за рамки вашего урока.
Комментарии:
1. Спасибо вам за это! После решения проблемы, с помощью всех присутствующих, это в основном то, как выглядело мое решение.
Ответ №3:
Моя версия:
public class Receipt {
public static void main(String[] args) {
int firstMealPrice = 38;
int secondMealPrice = 40;
int thirdMealPrice = 30;
double taxMultiplier = 0.08;
double tipMultiplier = 0.15;
int mealSubtotalPrice = firstMealPrice secondMealPrice thirdMealPrice;
double mealTax = mealSubtotalPrice * taxMultiplier;
double mealTip = mealSubtotalPrice * tipMultiplier;
double mealTotalPrice = mealSubtotalPrice
mealTax
mealTip;
print("Subtotal:");
print(mealSubtotalPrice);
print("Tax:");
print(mealTax);
print("Tip:");
print(mealTip);
print("Total:");
print(mealTotalPrice);
}
private static void print(Object obj) {
System.out.println(obj);
}
}