编辑:需要它的人的完整代码:https://hastebin.com/tovazutuni.cs
好吧所以我正在努力解决一个大汉堡店的挑战,但为了保持简单,这是一个面临的类似问题:
public class Burger {
private double priceWithAdditions = 5.00;
private double price = 5.00;
private String addition1;
private double addition1Price;
switch(burgersAdditionScanner()){
case "mayo":
this.addition1 = "Mayo";
this.addition1Price = 0.40;
this.priceWithAdditions += this.addition1Price;
System.out.println("Added Additions " + this.addition1 + " for the price of $" +this.addition1Price);
break;
default: System.out.println("Get Out");
稍后在代码中,我有一个方法来打印收据,但是在交换机内部更改的变量值不会在它之外更新:
public void Receipt() {
System.out.println("You Bought " + this.name + " burger for the price of $" + this.price + " with the following \nAdditions:");
if(this.addition1 != null ) {
System.out.println("Addition " + this.addition1 + " for $" + this.addition1Price);
}
System.out.println("The final price is " + this.priceWithAdditions); }
考虑到addition1和priceWithAdditions的值在这种情况下没有变化,加法1为空,priceWithAdditions仍然是5.00而不是5.40。有谁知道如何使这些变量的值更新我们的开关。如果你能帮助我,我真的很感激,拜托,谢谢你
控制台输出:(有扫描仪,所以我可以输入我的选择)
add addition 1
Choose Addition 1
Lettuce - $0.50
Cheese - $1.00
Ketchup - $0.20
Mayo - $0.40
mayo
Added Addition Mayonaise for the price of $0.4
Add Additions or none
Add Addition 1
Add Addition 2
Add Adition 3
Add Adition 4
Receipt
receipt
You Bought Amer's Booty burger for the price of $5.0 with the following
Additions:
The final price is 5.0
Get Out
答案 0 :(得分:2)
问题是您在Receipt()
的错误实例上调用Burger
。对于Receipt()
(我看到的)的所有来电,您都是在Burger
的新实例上调用它,如下所示:
case "receipt":
HealthyBurger burgerReceipt = new HealthyBurger();
burgerReceipt.Receipt();
burgerReceipt
是HealthyBurger
的新实例,而不是您调用任何其他运算符的实例。因此,它将包含HealthyBurger
的默认值。您可以通过在已变异的Receipt
的同一实例上调用HealthyBurger
来解决此问题。例如:
HealthyBurger burger = new HealthyBurger()
burger.addAddition6()
burger.Receipt()
您的代码对我来说有点太乱了,无法为您提供问题的确切解决方案,但是您正在Burger
类中创建Restaurant
的新实例成为Burger
本身。我想如果你花时间阅读基本的继承/面向对象原则,你应该能够显着简化你的代码。