Java:如何在交换机外部更改变量值? (刚看完帖子)

时间:2017-08-19 01:23:08

标签: java switch-statement

编辑:需要它的人的完整代码: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

1 个答案:

答案 0 :(得分:2)

问题是您在Receipt()的错误实例上调用Burger。对于Receipt()(我看到的)的所有来电,您都是在Burger的新实例上调用它,如下所示:

case "receipt": 
    HealthyBurger burgerReceipt = new HealthyBurger();
    burgerReceipt.Receipt();

burgerReceiptHealthyBurger的新实例,而不是您调用任何其他运算符的实例。因此,它将包含HealthyBurger的默认值。您可以通过在已变异的Receipt的同一实例上调用HealthyBurger来解决此问题。例如:

HealthyBurger burger = new HealthyBurger()
burger.addAddition6()
burger.Receipt()

您的代码对我来说有点太乱了,无法为您提供问题的确切解决方案,但是您正在Burger类中创建Restaurant的新实例成为Burger本身。我想如果你花时间阅读基本的继承/面向对象原则,你应该能够显着简化你的代码。